给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数)。
示例 1:
输入: [2,3,-2,4]
输出: 6
解释: 子数组 [2,3] 有最大乘积 6。
示例 2:
输入: [-2,0,-1]
输出: 0
解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/maximum-product-subarray
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
参考了答案,其实一次遍历就能解决问题。因为数组里的数字可能是正数也可能是负数,所以,连续的最大,最小都要记录,不连续的只需要记录最大值
class Solution(object):
def maxProduct(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
if len(nums) == 1:
return nums[0]
conmin = nums[0]
conmax = nums[0]
unconmax = nums[0]
for i in range(1, len(nums)):
nconmin = min(conmin*nums[i], conmax*nums[i], nums[i])
nconmax = max(conmin*nums[i], conmax*nums[i], nums[i])
unconmax = max(nconmax, unconmax)
conmin, conmax = nconmin, nconmax
return unconmax