53 最大子序和

2021-09-24 11:52:46 字數 1609 閱讀 8333

1.暴力列舉(時間超出限制)

class solution:

def maxsubarray(self, nums: list[int]) -> int:

res=

for i in range(len(nums)):

sum_seq=

for j in range(i,len(nums)):

return(max(res))

class solution:

def maxsubarray(self, nums: list[int]) -> int:

res=nums[0]

for i in range(len(nums)):

tmp_sum=0

for j in range(i,len(nums)):

tmp_sum+=nums[j]

if tmp_sum>res:

res=tmp_sum

return(res)

2.動態規劃法

maxsum[i] 記錄以第i個結尾的子陣列的最大和

maxsum[i+1]=max

對maxsum[i+1]來說,若maxsum[i]<0,則對nums[i+1]相加沒用(這也類似於掃瞄演算法,以及kadane演算法)

class solution:

def maxsubarray(self, nums: list[int]) -> int:

maxsum=[nums[0]]

for i in range(1,len(nums)):

res=max(maxsum)

return(res)

class solution:

def maxsubarray(self, nums: list[int]) -> int:

res=nums[0]

sum_i=nums[0]

for i in range(1,len(nums)):

sum_i=max(sum_i+nums[i],nums[i]) #不需儲存之前計算的結果

if sum_i>res:

res=sum_i

return(res)

3.掃瞄法

class solution:

def maxsubarray(self, nums: list[int]) -> int:

res=nums[0]

sum_i=nums[0]

for i in range(1,len(nums)):

if sum_i<0:

sum_i=nums[i]

else:

sum_i+=nums[i]

if sum_i>res:

res=sum_i

return(res)

53 最大子序和

給定乙個整數陣列nums,找到乙個具有最大和的連續子陣列 子陣列最少包含乙個元素 返回其最大和。示例 輸入 2,1,3,4,1,2,1,5,4 輸出 6 解釋 連續子陣列 4,1,2,1 的和最大,為 6。兩個變數,乙個是ans,用來儲存 更新子串行 乙個maxn,始終儲存著當前最大的子串行。子串行...

53 最大子序和

題目 給定乙個整數陣列nums,找到乙個具有最大和的連續子陣列 子陣列最少包含乙個元素 返回其最大和。示例 輸入 2,1,3,4,1,2,1,5,4 輸出 6解釋 連續子陣列 4,1,2,1 的和最大,為 6。思路 因為要考慮連續,所以需注意兩點,與當前比較的必定包含當前節點的上乙個節點,前n個節點...

53 最大子序和

給定乙個整數陣列nums,找到乙個具有最大和的連續子陣列 子陣列最少包含乙個元素 返回其最大和。示例 輸入 2,1,3,4,1,2,1,5,4 輸出 6解釋 連續子陣列 4,1,2,1 的和最大,為 6。高階 如果你已經實現複雜度為 o n 的解法,嘗試使用更為精妙的分治法求解。package le...