给定一个整数数组 nums
,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数)。
示例 1:
输入: [2,3,-2,4]
输出: 6
解释: 子数组 [2,3] 有最大乘积 6。
示例 2:
输入: [-2,0,-1] 输出: 0 解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。
正常人做法:
1 class Solution { 2 public: 3 int maxProduct(vector<int>& nums) { 4 int n = nums.size(); 5 long long mindp = nums[0]; 6 long long maxdp = nums[0]; 7 long long res = nums[0]; 8 for(int i = 1;i < nums.size();++i) 9 { 10 long long x = nums[i]; 11 long long max_dp = max(max(mindp*x,maxdp*x),x); 12 long long min_dp = min(min(mindp*x,maxdp*x),x); 13 maxdp = max_dp; 14 mindp = min_dp; 15 res = max(res,maxdp); 16 } 17 return res; 18 } 19 };
讨论里某一神仙做法:
1 class Solution: 2 def maxProduct(self, A): 3 B = A[::-1] 4 for i in range(1, len(A)): 5 A[i] *= A[i - 1] or 1 6 B[i] *= B[i - 1] or 1 7 return max(max(A),max(B))