求连续子数组的最大乘积

def maxProduct(arr):
    if len(arr)==1:
        return arr
    max_val=arr[0]
    min_val=arr[0]
  #用于保存最大乘积的结果 res
=arr[0] for i in range(1,len(arr)):
        #保留上一次计算的最大值,以便带入下面求解三者最大值,如果没有tmp_value,带入后面求min_val的时候,用max_val求三者最大值就不是上次的max_val了
     tmp_max=max_val 
     #往前走一步的最大乘积必然在这三个中产生,因为有负数可能出现,所以保留最小乘积值 max_val
=max(max(tmp_max*arr[i],min_val*arr[i]),arr[i]) min_val=min(min(tmp_max*arr[i],min_val*arr[i]),arr[i])
     #当前最大乘积与历史保存的最大乘积进行比较,留下最大的乘积即可 res
=max(max_val,res) return res

 

posted @ 2018-01-22 18:40  光彩照人  阅读(491)  评论(0编辑  收藏  举报