連續的處理很巧妙,借用了乙個res處理,常看
class solution:
def maxproduct(self, nums: list[int]) -> int:
# 存放到當前索引的最大值,最小值, 狀態定義成二維的好做
# 不要搞dp = [[0, 0]] * 2裡面的[0, 0] 就是乙個了,變化會有干擾的, 是淺拷貝
dp = [[nums[0] for _ in range(2)] for _ in range(2)]
res = nums[0]
for i in range(1, len(nums)):
# -1 % 2 為 1,-1 // 2 為 -1
# x 先1 後0 然後迴圈 y 先0 後1 然後迴圈
x, y = i % 2, (i - 1) % 2
# dp[x][1] 放了到當前索引的乘積最小值, dp[x][0] 放了從起始索引到現在的乘積最大值,遇到負數就更新這個起始索引
# res放了到當前索引的最大值。
# 這個處理很牛,可以記住這種處理
dp[x][0] = max(dp[y][0] * nums[i], nums[i], dp[y][1] * nums[i])
dp[x][1] = min(dp[y][0] * nums[i], nums[i], dp[y][1] * nums[i])
res = max(dp[x][0], res)
return res
152 乘積最大子陣列
152.乘積最大子陣列 class solution def maxproduct self,nums list int int dp nums i for i in range len nums for j in range len nums max product dp 0 0 for i in...
152 乘積最大子陣列
給你乙個整數陣列 nums 請你找出陣列中乘積最大的連續子陣列 該子陣列中至少包含乙個數字 並返回該子陣列所對應的乘積。示例 1 輸入 2,3,2,4 輸出 6 解釋 子陣列 2,3 有最大乘積 6。示例 2 輸入 2,0,1 輸出 0 解釋 結果不能為 2,因為 2,1 不是子陣列。class s...
152 乘積最大子陣列
類似於53題最大子序和,給乙個整數陣列 nums 找出陣列中乘積最大的連續子陣列 該子陣列中至少包含乙個數字 並返回該子陣列所對應的乘積。乘積最大,連續子陣列 乘積最大的連續子陣列,使用動態規劃方法 class solution def maxproduct self,nums if not num...