152_MaximumProductSubarray - a920604a/leetcode GitHub Wiki
title: 152. Maximum Product Subarray
給定一陣列,求出乘積最大連續子陣列,並返回其值
- 維護兩dp,一條紀錄至今最小,一條紀錄至今最大,因為最大值可能是最小值乘以負數。
class Solution {
public:
int maxProduct(vector<int>& nums) {
int n= nums.size(), ret = nums[0];
vector<int> mx(n,0), mn(n,0);
mx[0] = mn[0] = nums[0];
for(int i=1;i<n;++i){
mn[i] = min(min(mx[i-1]*nums[i],mn[i-1]*nums[i]), nums[i]);
mx[i] = max(max(mx[i-1]*nums[i],mn[i-1]*nums[i]), nums[i]);
ret = max(ret, mx[i]);
}
return ret;
}
};
class Solution {
public:
int maxProduct(vector<int>& nums) {
int n= nums.size();
int mn = nums[0],mx = nums[0];
int ret = nums[0];
for(int i=1;i<n;++i){
int pre_mn = mn;
mn = min(nums[i], min(mn*nums[i], mx*nums[i]));
mx = max(nums[i], max(pre_mn*nums[i], mx*nums[i]));
ret = max(ret, mx);
}
return ret;
}
};
- option 1
- time complexity
O(n)
- space complexity
O(n)
- time complexity
- option 2
- time complexity
O(n)
- space complexity
O(1)
- time complexity