152 Maximum Product Subarray 乘積最大子序列
阿新 • • 發佈:2018-04-06
-s true www. com for pre pro return ems
找出一個序列中乘積最大的連續子序列(該序列至少包含一個數)。
例如, 給定序列 [2,3,-2,4],
其中乘積最大的子序列為 [2,3] 其乘積為 6。
詳見:https://leetcode.com/problems/maximum-product-subarray/description/
方法一:
class Solution { public: int maxProduct(vector<int>& nums) { int size=nums.size(); if(size==0||nums.empty()) { return 0; } vector<int> f(size,0),g(size,0); int res=nums[0]; f[0]=nums[0]; g[0]=nums[0]; for(int i=1;i<size;++i) { f[i]=max(nums[i],max(nums[i]*f[i-1],nums[i]*g[i-1])); g[i]=min(nums[i],min(nums[i]*g[i-1],nums[i]*f[i-1])); res=max(res,f[i]); } return res; } };
方法二:優化空間復雜度
class Solution { public: int maxProduct(vector<int>& nums) { int size=nums.size(); if(size==0||nums.empty()) { return 0; } int mx=nums[0]; int mn=nums[0]; int res=nums[0]; for(int i=1;i<size;++i) { int tmax=mx,tmin=mn; mx=max(nums[i],max(tmax*nums[i],tmin*nums[i])); mn=min(nums[i],min(tmax*nums[i],tmin*nums[i])); res=max(res,mx); } return res; } };
參考:https://www.cnblogs.com/grandyang/p/4028713.html
152 Maximum Product Subarray 乘積最大子序列