lc152. Maximum Product Subarray

175 阅读1分钟
  1. Maximum Product Subarray Medium

4143

156

Add to List

Share Given an integer array nums, find the contiguous subarray within an array (containing at least one number) which has the largest product.

Example 1:

Input: [2,3,-2,4] Output: 6 Explanation: [2,3] has the largest product 6. Example 2:

Input: [-2,0,-1] Output: 0 Explanation: The result cannot be 2, because [-2,-1] is not a subarray. Accepted

思路:因为有负数存在,所以必须存 imax,imin for循环数组 1.nums[i]为正时,imax=max(imaxnums[i],nums[i]) imin=min(iminnums[i],nums[i]) 2.nums[i]为负时,临时变量tm=imax先存一下 imax=max(iminnums[i],nums[i]) imin=min(tmnums[i],nums[i]) res=max(res,imax)

代码:python3

class Solution:
    def maxProduct(self, nums: List[int]) -> int:
        imax=nums[0]
        imin=nums[0]
        res=nums[0]
        for i in range(1,len(nums)):
            if nums[i]>0:
                imax=max(imax*nums[i],nums[i])
                imin=min(imin*nums[i],nums[i])
            else:
                t=imax
                imax=max(imin*nums[i],nums[i])
                imin=min(t*nums[i],nums[i])
            res=max(res,imax)


        return res

时间复杂度:O(m) 空间复杂度:O(1)