当前位置:网站首页>LeetCode每日一题(1856. Maximum Subarray Min-Product)
LeetCode每日一题(1856. Maximum Subarray Min-Product)
2022-07-03 09:01: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
- 对于包括 nums[i]在内的,并且 nums[i]在其中为最小值的 subarray, 计算 min-product
- 用 monostack 来存储已经遍历过的 num 及其 index, 方便查找距离当前 num[i]最近且小于 num[i]的元素的 index, 这样就可以确定 nums[i]为最小值的 subarray 的左右边界
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
}
}
边栏推荐
- 2022-2-13 learning xiangniuke project - version control
- Crawler career from scratch (II): crawl the photos of my little sister ② (the website has been disabled)
- Flink学习笔记(十一)Table API 和 SQL
- State compression DP acwing 91 Shortest Hamilton path
- CATIA automation object architecture - detailed explanation of application objects (III) systemservice
- [point cloud processing paper crazy reading cutting-edge version 12] - adaptive graph revolution for point cloud analysis
- Idea uses the MVN command to package and report an error, which is not available
- NPM install installation dependency package error reporting solution
- 【点云处理之论文狂读前沿版13】—— GAPNet: Graph Attention based Point Neural Network for Exploiting Local Feature
- Overview of database system
猜你喜欢

Go language - JSON processing

Recommend a low code open source project of yyds

Digital statistics DP acwing 338 Counting problem

Spark 结构化流写入Hudi 实践

Just graduate student reading thesis
![[kotlin learning] control flow of higher-order functions -- lambda return statements and anonymous functions](/img/a3/b442508af9b059d279cffb34dee9bf.png)
[kotlin learning] control flow of higher-order functions -- lambda return statements and anonymous functions
![[set theory] order relation (eight special elements in partial order relation | ① maximum element | ② minimum element | ③ maximum element | ④ minimum element | ⑤ upper bound | ⑥ lower bound | ⑦ minimu](/img/57/b413a93a456a1872fc19aa825c937a.jpg)
[set theory] order relation (eight special elements in partial order relation | ① maximum element | ② minimum element | ③ maximum element | ④ minimum element | ⑤ upper bound | ⑥ lower bound | ⑦ minimu

【点云处理之论文狂读经典版14】—— Dynamic Graph CNN for Learning on Point Clouds

CSDN markdown editor help document

Django operates Excel files through openpyxl to import data into the database in batches.
随机推荐
IDEA 中使用 Hudi
[point cloud processing paper crazy reading classic version 8] - o-cnn: octree based revolutionary neural networks for 3D shape analysis
ERROR: certificate common name “www.mysql.com” doesn’t match requested host name “137.254.60.11”.
[set theory] order relation (chain | anti chain | chain and anti chain example | chain and anti chain theorem | chain and anti chain inference | good order relation)
LeetCode每日一题(1162. As Far from Land as Possible)
[point cloud processing paper crazy reading classic version 14] - dynamic graph CNN for learning on point clouds
307. Range Sum Query - Mutable
[untitled] use of cmake
2022-2-13 learn the imitation Niuke project - Project debugging skills
【点云处理之论文狂读经典版13】—— Adaptive Graph Convolutional Neural Networks
Crawler career from scratch (IV): climb the bullet curtain of station B through API
Common formulas of probability theory
Spark 概述
LeetCode 715. Range module
【点云处理之论文狂读经典版9】—— Pointwise Convolutional Neural Networks
Usage of pandas to obtain MySQL data
【点云处理之论文狂读前沿版8】—— Pointview-GCN: 3D Shape Classification With Multi-View Point Clouds
Alibaba cloud notes for the first time
Hudi 快速体验使用(含操作详细步骤及截图)
Overview of image restoration methods -- paper notes