classSolution:defmaxProduct(self,nums: List[int]) ->int: n =len(nums) a = b =1 ans =float('-inf')for i inrange(1, n +1): temp = a a =max(a * nums[i -1], b * nums[i -1], nums[i -1]) b =min(temp * nums[i -1], b * nums[i -1], nums[i -1]) ans =max(ans, a)return ans
JavaScript Code:
varmaxProduct=function (nums) {let max = nums[0];let min = nums[0];let res = nums[0];for (let i =1; i <nums.length; i++) {let tmp = min; min =Math.min(nums[i],Math.min(max * nums[i], min * nums[i])); // 取最小 max =Math.max(nums[i],Math.max(max * nums[i], tmp * nums[i])); /// 取最大 res =Math.max(res, max); }return res;};
CPP Code:
classSolution {public:intmaxProduct(vector<int>& A) {int maxProd =1, minProd =1, ans = INT_MIN;for (int n : A) {int a = n * maxProd, b = n * minProd; maxProd =max({n, a, b}); minProd =min({n, a, b}); ans =max(ans, maxProd); }return ans; }};
复杂度分析
时间复杂度:$O(N)$
空间复杂度:$O(1)$
更多题解可以访问我的 LeetCode 题解仓库:https://github.com/azl397985856/leetcode 。 目前已经 30K star 啦。