Find the contiguous subarray within an array (containing at least one number) which has the largest product.
For example, given the array [2,3,-2,4]
,
the contiguous subarray [2,3]
has the largest product = 6
.
思路:此题为一维动态规划问题,我们需要找到以每个点为结尾的子串的最大乘积,作为局部最优解,通过和全局最优解进行比较,得到结果。
注意:因为乘积有符号的变化,所以我们应该找到每一个点的最大乘积与最小乘积来考虑负数乘以负数反而更大的情况。
class Solution {
public:
int maxProduct(vector<int>& nums) {
if (nums.size() == 0) {
return 0;
}
int global = nums[0];
int min_last = nums[0], max_last = nums[0];
for (int i = 1; i < nums.size(); i++) {
int temp = max_last;
max_last = max(max(nums[i] * max_last, nums[i]), nums[i] * min_last);
min_last = min(min(nums[i] * temp, nums[i]), nums[i] * min_last);
global = max(max_last, global);
}
return global;
}
};