乘積最大子序列-力扣

在這裏插入圖片描述

思路

分析:整數數組,只有正數時,每一個數與前一個數相乘都大於等於這個數,考慮負數時,乘奇數個負數,整個結果變成最小,偶數個負數時,負號抵消。
思路:使用三個變量,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)) 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章