[leetcode]Maximum Product Subarray
链接:https://leetcode.com/problems/maximum-product-subarray/description/
Question
Given an integer array nums
, find the contiguous subarray within an array (containing at least one number) which has the largest product.
Example 1
Input: [2,3,-2,4]
Output: 6
Explanation: [2,3] has the largest product 6.
Example 2
Input: [-2,0,-1]
Output: 0
Explanation: The result cannot be 2, because [-2,-1] is not a subarray.
Solution
class Solution {
public:
#define inf 0x3fffffff
int maxProduct(vector<int>& nums) {
int size = nums.size();
vector<int> dp_min, dp_max;
dp_min.resize(size+1);
dp_max.resize(size+1);
dp_min[0] = dp_max[0] = 1;
int global_max = -inf;
for (int i = 1; i <= size; i++) {
int value1 = dp_min[i-1]*nums[i-1];
int value2 = dp_max[i-1]*nums[i-1];
int min_value = min(value1, value2);
int max_value = max(value1, value2);
dp_max[i] = max(max_value, nums[i-1]);
dp_min[i] = min(min_value, nums[i-1]);
global_max = max(global_max, dp_max[i]);
}
return global_max;
}
};
思路:因为存在负数,所以搞一个dp_min来记录最小的数,是为了保存一下负数。实际上,如果没有负数,这道题也一样可以做,因为实际上最后还是看dp_max的值,dp_min的作用就是保存一下负值(后面有可能负负得正)。