Skip to content

Commit 09a7a73

Browse files
committed
adds 1856-maximum-subarray-min-product.java
1 parent 299448e commit 09a7a73

File tree

1 file changed

+31
-0
lines changed

1 file changed

+31
-0
lines changed

Diff for: java/1856-maximum-subarray-min-product.java

+31
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
class Solution {
2+
public int maxSumMinProduct(int[] nums) {
3+
Stack<long[]> stack = new Stack<>(); // index, value
4+
long[] pre = new long[nums.length];
5+
pre[0] = nums[0];
6+
long res = 0, mod = (int) 1e9 + 7;
7+
for (int i = 1; i < nums.length; i++) {
8+
pre[i] = pre[i - 1] + nums[i];
9+
}
10+
for (int i = 0; i < nums.length; i++) {
11+
int idx = i;
12+
while (stack.size() != 0 && nums[i] < stack.peek()[1]) {
13+
long[] t = stack.pop();
14+
int start = (int) t[0];
15+
long value = t[1];
16+
long sum = pre[i - 1] - ((start - 1) < 0 ? 0 : pre[start - 1]);
17+
res = Math.max(res, (value * sum));
18+
idx = start;
19+
}
20+
stack.push(new long[] { idx, nums[i] });
21+
}
22+
while (stack.size() != 0) {
23+
long[] t = stack.pop();
24+
int start = (int) t[0];
25+
long value = t[1];
26+
long sum = pre[nums.length - 1] - ((start - 1) < 0 ? 0 : pre[start - 1]);
27+
res = Math.max(res, (value * sum));
28+
}
29+
return (int) ((res + mod) % mod);
30+
}
31+
}

0 commit comments

Comments
 (0)