modify code

master
algorithmzuo 4 years ago
parent 124a787f8b
commit 3387eaac97

@ -67,7 +67,8 @@ public class Code02_AllTimesMinToMax {
// 本题可以在leetcode上找到原题
// 测试链接 : https://leetcode.com/problems/maximum-subarray-min-product/
// 注意测试题目数量大,要取模,但是思路和课上讲的是完全一样的
// 注意溢出的处理即可
// 注意溢出的处理即可也就是用long类型来表示累加和
// 还有优化就是,你可以用自己手写的数组栈,来替代系统实现的栈,也会快很多
public static int maxSumMinProduct(int[] arr) {
int size = arr.length;
long[] sums = new long[size];
@ -76,17 +77,20 @@ public class Code02_AllTimesMinToMax {
sums[i] = sums[i - 1] + arr[i];
}
long max = Long.MIN_VALUE;
Stack<Integer> stack = new Stack<Integer>();
int[] stack = new int[size];
int stackSize = 0;
for (int i = 0; i < size; i++) {
while (!stack.isEmpty() && arr[stack.peek()] >= arr[i]) {
int j = stack.pop();
max = Math.max(max, (stack.isEmpty() ? sums[i - 1] : (sums[i - 1] - sums[stack.peek()])) * arr[j]);
while (stackSize != 0 && arr[stack[stackSize - 1]] >= arr[i]) {
int j = stack[--stackSize];
max = Math.max(max,
(stackSize == 0 ? sums[i - 1] : (sums[i - 1] - sums[stack[stackSize - 1]])) * arr[j]);
}
stack.push(i);
stack[stackSize++] = i;
}
while (!stack.isEmpty()) {
int j = stack.pop();
max = Math.max(max, (stack.isEmpty() ? sums[size - 1] : (sums[size - 1] - sums[stack.peek()])) * arr[j]);
while (stackSize != 0) {
int j = stack[--stackSize];
max = Math.max(max,
(stackSize == 0 ? sums[size - 1] : (sums[size - 1] - sums[stack[stackSize - 1]])) * arr[j]);
}
return (int) (max % 1000000007);
}

Loading…
Cancel
Save