Skip to content

Commit 303f4de

Browse files
authored
Update 1856-maximum-subarray-min-product.js
1 parent fce34a3 commit 303f4de

File tree

1 file changed

+47
-0
lines changed

1 file changed

+47
-0
lines changed

1856-maximum-subarray-min-product.js

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,50 @@
1+
/**
2+
* @param {number[]} nums
3+
* @return {number}
4+
*/
5+
const maxSumMinProduct = function(nums) {
6+
const n = nums.length, left = Array(n).fill(0), right = Array(n).fill(n - 1)
7+
const mod = BigInt(1e9 + 7)
8+
let res = 0n
9+
let stk = []
10+
for(let i = 0; i < n; i++) {
11+
while(stk.length && nums[stk[stk.length - 1]] >= nums[i]) {
12+
stk.pop()
13+
}
14+
left[i] = stk.length ? stk[stk.length - 1] + 1 : 0
15+
stk.push(i)
16+
}
17+
18+
stk = []
19+
for(let i = n - 1; i >= 0; i--) {
20+
while(stk.length && nums[stk[stk.length - 1]] >= nums[i]) {
21+
stk.pop()
22+
}
23+
right[i] = stk.length ? stk[stk.length - 1] - 1 : n - 1
24+
stk.push(i)
25+
}
26+
27+
const preSum = []
28+
for(let i = 0; i < n; i++) {
29+
preSum[i] = (i === 0 ? 0n : preSum[i - 1]) + BigInt(nums[i])
30+
}
31+
for(let i = 0; i < n; i++) {
32+
res = max(res, fn(nums[i], left[i], right[i]))
33+
}
34+
35+
return res % mod
36+
37+
function max(a, b) {
38+
return a > b ? a : b
39+
}
40+
function fn(v, l, r) {
41+
return BigInt(v) * (l === 0 ? preSum[r] : preSum[r] - preSum[l - 1])
42+
}
43+
};
44+
45+
// another
46+
47+
148
/**
249
* @param {number[]} nums
350
* @return {number}

0 commit comments

Comments
 (0)