For example, given the array [2,3,-2,4],
the contiguous subarray [2,3] has the largest product = 6.
思路;最大乘积与前n-1位有关,有3中可能结果,1.前n-1位最大与当前乘积最大;2前n-1位最小与当前相乘最大(当前为否的时候);3.当前最大。
程序设计:
1.要有记录与当前乘积最大,最小的变量,历史最大记录;
2.当前位置为首位的时候,两个变量为首位置值;
3.记录当前最大子序列乘积的变量;
4.整个过程要比较4次才能完成。
当前乘积最大与当前的最大,用于下一位最大的记录
当前乘积最小与当前的最小,用于下一位的记录
历史最大与当前最大的最大。用于最终的记录
python 代码:
class Solution(object):
def maxProduct(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
n=len(nums);
if not nums or n==0:
return 0
pos_product=neg_product=max_product=nums[0]
for i in range(1,n):
a=pos_product*nums[i]
b=neg_product*nums[i]
pos_product=max(max(a,b),nums[i])
neg_product=min(min(a,b),nums[i])
max_product=max(max_product,pos_product)
return max_product