思路
分析:整數數組,只有正數時,每一個數與前一個數相乘都大於等於這個數,考慮負數時,乘奇數個負數,整個結果變成最小,偶數個負數時,負號抵消。
思路:使用三個變量,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))