乘積最大子串行 力扣

2021-09-25 16:15:40 字數 955 閱讀 1690

分析:整數陣列,只有正數時,每乙個數與前乙個數相乘都大於等於這個數,考慮負數時,乘奇數個負數,整個結果變成最小,偶數個負數時,負號抵消。

思路:使用三個變數,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))

乘積最大子串行

比如,序列 2,3,2,4 中乘積最大的子串行為 2,3 其乘積為6。方法一 自己一開始寫的方法比較麻煩。通過記錄陣列中元素為0的下標,然後以0為邊界,分割陣列,然後對每個分割後的陣列分別求最大乘積子串行,最後在所有的分割陣列的最大乘積子串行中取最大乘積。class solution int len...

最大子串行乘積

思路 以元素i結尾序列提供的最大正數記做 pos,最小負數記做 nag a n 大於零時 pos n max max value max 若n 1位置存在最小負數,更新 nag n nag n 1 a n a n 小於零時 pos n max max value max 更新 nag n min a...

乘積最大子串行

給定乙個整數陣列 nums 找出乙個序列中乘積最大的連續子串行 該序列至少包含乙個數 示例 1 輸入 2,3,2,4 輸出 6 解釋 子陣列 2,3 有最大乘積 6。示例 2 輸入 2,0,1 輸出 0 解釋 結果不能為 2,因為 2,1 不是子陣列。由於存在負數,那麼最大的數可能變最小的數,最小的...