LeetCode - 乘积最大子串

给定一个整数数组 nums ,找出一个序列中乘积最大的连续子串(该序列至少包含一个数)。

示例 1:

输入: [2,3,-2,4]
输出: 6
解释: 子数组 [2,3] 有最大乘积 6。
示例 2:

输入: [-2,0,-1]
输出: 0
解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。

思考:
由于乘法的特殊性,所以nums上每一位的乘积最大值(不论正负),都只与前一个值能达到的最大值(当前数字为正)和最小值(当前数位为负)有关系。

nums = [2,3,-2,4]
imin ,imax  =1,1
max_product = float('-inf')

for num in nums:
    if num < 0 :
        imin,imax = imax ,imin
    imax = max(imax * num, num)
    imin =  min (imin * num, num)
    
    max_product = max(imax, product)

print(max_product)

posted @ 2019-09-19 16:30  james_cai  阅读(523)  评论(1)    收藏  举报