Python 最大子串行乘積

2021-10-04 10:02:47 字數 1195 閱讀 8793

設序列為a1,a2,a3...ai...an;

考慮ai時:

1.當ai大於0時,當前臨時最大乘積(tmp_max)為a1...ai-1中最大的連續子串行乘積(ret_max)乘上ai,或為ai

2.當ai小於0時,當前臨時最大乘積(tmp_max)為a1...ai-1中最小的連續子串行乘積(ret_min)乘上ai,或為ai

3.當ai小於0時,臨時最大乘積清零

故儲存連續子串行a1...ai-1的最大乘積和最小乘積,可以計算考慮ai時的臨時最大乘積:

tmp_max = max(ret_max * ai, ret_min * ai, ai)

tmp_min = min(ret_max * ai, ret_min * ai, ai)

更新最終的最大乘積:

ret = max(ret, ret_max)

# coding=utf-8

"""question:

有乙個整數型別的列表 nums,找出乙個序列中乘積最大的連續子串行(該序列至少包含乙個數)。

例:nums = [1, 2, -2, -1, 5, -4]

輸出:20, 序列為:[-1, 5, -4]

"""def max_sub_seq(nums):

if not nums:

return

# 設定初始值

ret_max = nums[0] # 儲存迄今為止的序列最大乘積

ret_min = nums[0] # 儲存迄今為止的序列最小乘積

ret = nums[0]

for num in nums[1:]:

# 計算包括當前元素的最大乘積

tmp_max = max(ret_max * num, ret_min * num, num)

# 計算包括當前元素的最小乘積(為負數準備)

tmp_min = min(ret_max * num, ret_min * num, num)

ret_max = tmp_max

ret_min = tmp_min

ret = max(ret, ret_max)

return ret

if __name__ == '__main__':

l = [2, -1, 4, -2, -3, 0, 1, 2]

print(max_sub_seq(l))

乘積最大子串行

比如,序列 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 不是子陣列。由於存在負數,那麼最大的數可能變最小的數,最小的...