问题:
Given an integer array nums
, find the contiguous subarray within an array (containing at least one number) which has the largest product.
思路:看了这篇文章https://leetcode.com/problems/maximum-product-subarray/discuss/48230/Possibly-simplest-solution-with-O(n)-time-complexity后突然明白是一个动态规划问题。
最大乘积子数组一定以某个元素i结尾,所以不妨定义imax表示以当前元素A[i]结尾的最大乘积子数组,由于负数的存在当前最大值可能来源于上一个元素的最小值。所以定义imin表示以当前元素A[i]结尾的最小乘积子数组,当A[i]小于0时交换imax和imin
代码如下:
class Solution {
public:
int maxProduct(vector<int>& nums) {
int ans=nums[0];
for(int i=1,imin=ans,imax=ans;i<nums.size();++i){
if(nums[i]<0){
swap(imin,imax);
}
imin=min(nums[i],imin*nums[i]);
imax=max(nums[i],imax*nums[i]);
ans=max(ans,imax);
}
return ans;
}
};