- 找到数组中的最大的子数组(连续的),使得他们的成绩最大:
- 给出[2,3,-2,4],答案为[2,3] 结果为6,那么返回6.
- 需要维护到目前位置连续的最大值以及最小值,因为负数最小值乘上正数的话那么就是最大值,所以也需要维护,代码如下:
class Solution {
public:
int maxProduct(vector<int>& nums) {
int sz = nums.size();
if(sz == 0)
return 0;
int maxVal = nums[0], minVal = nums[0], globalMax = nums[0];
int a, b;
for(int i = 1; i < sz; ++i){
a = max(maxVal * nums[i], minVal * nums[i]);
b = min(maxVal * nums[i], minVal * nums[i]);
maxVal = max(a, nums[i]);
minVal = min(b, nums[i]);
globalMax = max(globalMax, max(maxVal, minVal));
}
return globalMax;
}
};
int maxProducts(int[] arr) {
if (arr.length == 0)
return 0;
int maxVal = arr[0], minVal = arr[0];
int a, b;
for (int i = 1; i < arr.length; ++i) {
a = Math.max(maxVal * arr[i], minVal * arr[i]);
b = Math.min(maxVal * arr[i], minVal * arr[i]);
maxVal = Math.max(maxVal, a);
minVal = Math.min(minVal, b);
}
return Math.max(maxVal, minVal);
}