乘积最大子序列-力扣

在这里插入图片描述

思路

分析:整数数组,只有正数时,每一个数与前一个数相乘都大于等于这个数,考虑负数时,乘奇数个负数,整个结果变成最小,偶数个负数时,负号抵消。
思路:使用三个变量,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)) 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章