思路:
利用动态规划,
如果是累加,则只需要判断a[i]是否大于a[i]+total(a[i]之前所有数的加和),每一次的最大值存入lst中,最后输出max(lst)
但是对于乘积,也需要考虑负数负负得正的情况。所以需要判断两次,a[i]是否大于max(total_min * nums[i],total_max * nums[i]),或者小于min(total_min * nums[i],total_max * nums[i]),每一次的最大值和最小值分别存入lst_max,lst_min中,最后输出lst_max,lst_min中的最终的唯一最大值。
注意:
判断的时候需要引入一个暂时变量temp_max/temp_min,避免min(nums[i],min(total_min * nums[i],total_max * nums[i])) 在判断时,total_max已经变成了这一次迭代的结果。我们需要的是上一次迭代中的total_max和total_min。
def maxProduct(self, nums: List[int]) -> int:
total_max=nums[0]
total_min=nums[0]
lst_max=[total_max]
lst_min=[total_min]
for i in range(1,len(nums)):
temp_max=max(nums[i],max(total_min*nums[i],total_max*nums[i]))
temp_min=min(nums[i],min(total_min*nums[i],total_max*nums[i]))
total_max=temp_max
total_min=temp_min
lst_max.append(total_max)
lst_min.append(total_min)
return max(max(lst_max),max(lst_min))