连续子序列的最大乘积(leetcode 152)
一:解题思路
之前做过一道题目,求连续子序列的最大和。Time:O(n),Space:O(1)
二:完整代码示例 (C++版和Java版)
C++:
class Solution { private: int max3(int a, int b, int c) { return max(max(a,b),c); } int min3(int a, int b, int c) { return min(min(a,b),c); } public: int maxProduct(vector<int>& nums) { if (nums.size() == 0) return 0; int curMax = nums[0], curMin = nums[0], maxValue = nums[0]; for (int i = 1; i < nums.size(); i++) { int a = curMax * nums[i]; int b = curMin * nums[i]; int c = nums[i]; curMax = max3(a,b,c); curMin = min3(a,b,c); maxValue = max(maxValue,curMax); } return maxValue; } };
Java:
class Solution { private int max(int a,int b,int c) { return Math.max(Math.max(a,b),c); } private int min(int a,int b,int c) { return Math.min(Math.min(a,b),c); } public int maxProduct(int[] nums) { if(nums==null || nums.length==0) return 0; int curMax=nums[0],curMin=nums[0],max=nums[0]; for(int i=1;i<nums.length;i++) { int a=nums[i]*curMax; int b=nums[i]*curMin; int c=nums[i]; curMax=max(a,b,c); curMin=min(a,b,c); max=Math.max(max,curMax); } return max; } }
Python方法一:
class Solution: def max3(self,a:int,b:int,c:int)->int: return max(a,max(b,c)) def min3(self,a:int,b:int,c:int)->int: return min(a,min(b,c)) def maxProduct(self, nums: List[int]) -> int: n=len(nums) if n==0: return 0 curMaxValue=nums[0] curMinValue=nums[0] maxValue=nums[0] for i in range(1,n): a=nums[i]*curMaxValue b=nums[i]*curMinValue c=nums[i] curMaxValue=self.max3(a,b,c) curMinValue=self.min3(a,b,c) maxValue=max(maxValue,curMaxValue) return maxValue

浙公网安备 33010602011771号