当前位置:网站首页>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
}
}
边栏推荐
- Idea uses the MVN command to package and report an error, which is not available
- Apply for domain name binding IP to open port 80 record
- [kotlin learning] control flow of higher-order functions -- lambda return statements and anonymous functions
- Derivation of Fourier transform
- Banner - Summary of closed group meeting
- Common software open source protocols
- CATIA automation object architecture - detailed explanation of application objects (III) systemservice
- Beego learning - JWT realizes user login and registration
- Utilisation de hudi dans idea
- 制作jetson nano最基本的根文件系统、服务器挂载NFS文件系统
猜你喜欢

IDEA 中使用 Hudi
![[point cloud processing paper crazy reading cutting-edge version 12] - adaptive graph revolution for point cloud analysis](/img/c6/5f723d9021cf684dcfb662ed3acaec.png)
[point cloud processing paper crazy reading cutting-edge version 12] - adaptive graph revolution for point cloud analysis

Hudi学习笔记(三) 核心概念剖析

Spark 集群安装与部署

Hudi 快速体验使用(含操作详细步骤及截图)

Using Hudi in idea

Solve the problem of disordered code in vscode development, output Chinese and open source code

Crawler career from scratch (IV): climb the bullet curtain of station B through API

一款开源的Markdown转富文本编辑器的实现原理剖析

Construction of simple database learning environment
随机推荐
Vscode编辑器右键没有Open In Default Browser选项
Crawler career from scratch (3): crawl the photos of my little sister ③ (the website has been disabled)
1922. Count Good Numbers
Flink学习笔记(十一)Table API 和 SQL
IDEA 中使用 Hudi
Nodemcu-esp8266 development (vscode+platformio+arduino framework): Part 1 -- establishment of engineering template -template
2022-2-13 learning the imitation Niuke project - home page of the development community
Win10 quick screenshot
Common formulas of probability theory
LeetCode每日一题(985. Sum of Even Numbers After Queries)
[point cloud processing paper crazy reading frontier edition 13] - gapnet: graph attention based point neural network for exploring local feature
[point cloud processing paper crazy reading classic version 13] - adaptive graph revolutionary neural networks
Make the most basic root file system of Jetson nano and mount NFS file system on the server
Spark 结构化流写入Hudi 实践
Crawler career from scratch (I): crawl the photos of my little sister ① (the website has been disabled)
Jenkins learning (II) -- setting up Chinese
CATIA automation object architecture - detailed explanation of application objects (I) document/settingcontrollers
LeetCode每日一题(2232. Minimize Result by Adding Parentheses to Expression)
WARNING: You are using pip ; however. Later, upgrade PIP failed, modulenotfounderror: no module named 'pip‘
数字身份验证服务商ADVANCE.AI顺利加入深跨协 推进跨境电商行业可持续性发展