思路:
类似 Maximum Subarray
求最大连续整数和的问题,该题是解连续最大整数的积。
最大连续整数和:记录局部最大值和全局最大值。
最大连续整数积:记录局部最大值、全局最大值以及局部最小值,因为局部最小值有可能碰到下一个负数变成局部最大值,进而变成全局最大值。
时间复杂度O(N),空间复杂度O(1)。
class Solution {
public:
int maxProduct(vector<int>& nums) {
int size = nums.size();
if(size <= 0) return 0;
if(size == 1) return nums[0];
int max_local = nums[0];
int min_local = nums[0];
int gloable = nums[0];
for(int i = 1; i < size; ++i) {
int max_copy = max_local;
max_local = max(max(nums[i] * max_local, nums[i]), nums[i] * min_local);
min_local = min(min(nums[i] * max_copy, nums[i]), nums[i] * min_local);
gloable = max(max_local, gloable);
}
return gloable;
}
};