当前位置:网站首页>Leetcode daily question (1856. maximum subarray min product)
Leetcode daily question (1856. maximum subarray min product)
2022-07-03 09:33:00 【wangjun861205】
The min-product of an array is equal to the minimum value in the array multiplied by the array’s sum.
For example, the array [3,2,5] (minimum value is 2) has a min-product of 2 _ (3+2+5) = 2 _ 10 = 20.
Given an array of integers nums, return the maximum min-product of any non-empty subarray of nums. Since the answer may be large, return it modulo 109 + 7.
Note that the min-product should be maximized before performing the modulo operation. Testcases are generated such that the maximum min-product without modulo will fit in a 64-bit signed integer.
A subarray is a contiguous part of an array.
Example 1:
Input: nums = [1,2,3,2]
Output: 14
Explanation: The maximum min-product is achieved with the subarray [2,3,2] (minimum value is 2).
2 _ (2+3+2) = 2 _ 7 = 14.
Example 2:
Input: nums = [2,3,3,1,2]
Output: 18
Explanation: The maximum min-product is achieved with the subarray [3,3] (minimum value is 3).
3 _ (3+3) = 3 _ 6 = 18.
Example 3:
Input: nums = [3,1,5,6,4,2]
Output: 60
Explanation: The maximum min-product is achieved with the subarray [5,6,4] (minimum value is 4).
4 _ (5+6+4) = 4 _ 15 = 60.
Constraints:
- 1 <= nums.length <= 105
- 1 <= nums[i] <= 107
- For including nums[i] Inside , also nums[i] Which is the minimum subarray, Calculation min-product
- use monostack To store the traversed num And its index, Convenient to find the current distance num[i] Recent and less than num[i] The elements of the index, So you can make sure nums[i] Is the minimum value of subarray The left and right borders of
impl Solution {
pub fn max_sum_min_product(nums: Vec<i32>) -> i32 {
let mut left_bounds = Vec::new();
let mut right_bounds = Vec::new();
let mut stack: Vec<(i32, usize)> = Vec::new();
for i in 0..nums.len() {
while !stack.is_empty() {
let (last, j) = stack.remove(stack.len() - 1);
if last >= nums[i] {
continue;
}
stack.push((last, j));
break;
}
if stack.is_empty() {
left_bounds.push(0);
} else {
left_bounds.push(stack.last().unwrap().1 + 1);
}
stack.push((nums[i], i));
}
stack.clear();
for i in (0..nums.len()).rev() {
while !stack.is_empty() {
let (last, j) = stack.remove(stack.len() - 1);
if last >= nums[i] {
continue;
}
stack.push((last, j));
break;
}
if stack.is_empty() {
right_bounds.push(nums.len() - 1);
} else {
right_bounds.push(stack.last().unwrap().1 - 1);
}
stack.push((nums[i], i));
}
right_bounds.reverse();
let mut ans = 0i64;
let mut prefix: Vec<i64> = nums
.iter()
.scan(0i64, |s, v| {
*s += *v as i64;
Some(*s)
})
.collect();
prefix.insert(0, 0);
for i in 0..nums.len() {
let left = left_bounds[i];
let right = right_bounds[i];
ans = ans.max((prefix[right + 1] - prefix[left]) * nums[i] as i64);
}
(ans % (10i64.pow(9) + 7)) as i32
}
}
边栏推荐
- Crawler career from scratch (3): crawl the photos of my little sister ③ (the website has been disabled)
- Principles of computer composition - cache, connection mapping, learning experience
- PIP configuring domestic sources
- LeetCode每日一题(985. Sum of Even Numbers After Queries)
- [kotlin puzzle] what happens if you overload an arithmetic operator in the kotlin class and declare the operator as an extension function?
- CATIA automation object architecture - detailed explanation of application objects (I) document/settingcontrollers
- QT qstring:: number apply base conversion
- Logstash+jdbc data synchronization +head display problems
- Simple use of MATLAB
- Arduino handles JSON data, arduinojson assistant
猜你喜欢
文件系统中的目录与切换操作
【Kotlin学习】类、对象和接口——定义类继承结构
Windows安装Redis详细步骤
[point cloud processing paper crazy reading cutting-edge version 12] - adaptive graph revolution for point cloud analysis
Go language - Reflection
Analysis of the implementation principle of an open source markdown to rich text editor
There is no open in default browser option in the right click of the vscade editor
Django operates Excel files through openpyxl to import data into the database in batches.
Vscode编辑器右键没有Open In Default Browser选项
Spark overview
随机推荐
Beego learning - Tencent cloud upload pictures
Redis learning (I)
Integrated use of interlij idea and sonarqube
Crawler career from scratch (V): detailed explanation of re regular expression
Hudi data management and storage overview
[kotlin learning] classes, objects and interfaces - define class inheritance structure
解决Editor.md上传图片获取不到图片地址问题
从0开始使用pnpm构建一个Monorepo方式管理的demo
IDEA 中使用 Hudi
Temper cattle ranking problem
PolyWorks script development learning notes (4) - data import and alignment using file import
npm install安装依赖包报错解决方法
Trial of the combination of RDS and crawler
CATIA automation object architecture - detailed explanation of application objects (I) document/settingcontrollers
Hudi learning notes (III) analysis of core concepts
Django operates Excel files through openpyxl to import data into the database in batches.
LeetCode每日一题(1856. Maximum Subarray Min-Product)
Idea uses the MVN command to package and report an error, which is not available
DSP data calculation error
【Kotlin疑惑】在Kotlin类中重载一个算术运算符,并把该运算符声明为扩展函数会发生什么?