LeetCode 152. 乘積最大子序列(C++、python)
阿新 • • 發佈:2018-12-11
給定一個整數陣列 nums
,找出一個序列中乘積最大的連續子序列(該序列至少包含一個數)。
示例 1:
輸入: [2,3,-2,4]
輸出: 6
解釋: 子陣列 [2,3] 有最大乘積 6。
示例 2:
輸入: [-2,0,-1] 輸出: 0 解釋: 結果不能為 2, 因為 [-2,-1] 不是子陣列。
C++
class Solution { public: int maxProduct(vector<int>& nums) { int n=nums.size(); int temp=nums[0]; vector<int> M(n,0); vector<int> m(n,0); for(int i=0;i<n;i++) { if(i==0) { M[i]=nums[i]; m[i]=nums[i]; } else { M[i]=max(max(M[i-1]*nums[i],m[i-1]*nums[i]),nums[i]); m[i]=min(min(M[i-1]*nums[i],m[i-1]*nums[i]),nums[i]); } temp=max(temp,M[i]); } return temp; } };
python
class Solution: def maxProduct(self, nums): """ :type nums: List[int] :rtype: int """ temp=nums[0] n=len(nums) M=[0 for i in range(n)] m=[0 for i in range(n)] for i in range(0,n): if i==0: M[i]=nums[i] m[i]=nums[i] else: M[i]=max(max(M[i-1]*nums[i],m[i-1]*nums[i]),nums[i]) m[i]=min(min(M[i-1]*nums[i],m[i-1]*nums[i]),nums[i]) temp=max(temp,M[i]) return temp