思路
分析:整数数组,只有正数时,每一个数与前一个数相乘都大于等于这个数,考虑负数时,乘奇数个负数,整个结果变成最小,偶数个负数时,负号抵消。
思路:使用三个变量,maxVal记录最大结果,maxTem 保存最大的,minTem保存最小的。遍历整个数组,如果遇到负数,那么会导致最大的变最小的,最小的变最大的。因此交换两个的值
代码
import sys
class Solution(object):
def maxProduct(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
maxVal=-sys.maxsize
maxTem,minTem=1,1
for i in range(len(nums)):
if nums[i]<0:
maxTem,minTem=minTem,maxTem
maxTem=max(maxTem*nums[i],nums[i])
minTem=min(minTem*nums[i],nums[i])
maxVal=max(maxVal,maxTem)
return maxVal
还有一种解法,求两个方向的最大值,然后偶再求他们的最大值
class Solution:
def maxProduct(self, A):
B = A[::-1]
for i in range(1, len(A)):
A[i] *= A[i - 1] or 1
B[i] *= B[i - 1] or 1
return max(max(A),max(B))