53 最大子序和

2021-09-27 13:38:53 字數 996 閱讀 7014

問題:

給定乙個整數陣列nums,找到乙個具有最大和的連續子陣列(子陣列最少包含乙個元素),返回其最大和。

思路: 用乙個變數儲存子序的最大和,乙個變數遍歷所有大於零的子序

class solution:

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

l = len(nums)

i = 0

sub_sum = nums[i]

pre_sub_sum =sub_sum

i += 1

while i < l:

num = nums[i]

i += 1

if sub_sum > 0:

sub_sum += num

else:

sub_sum = num

if sub_sum > pre_sub_sum:

pre_sub_sum = sub_sum

return pre_sub_sum

執行用時 :68 ms

記憶體消耗 :14.4 mb

反思:最開始一直細化怎麼使連續元素的和最大,忽略了我以開始就有乙個變數在儲存最大的遍歷值。只需要保證最大變數裡存的是最大值就好,如果當前值是負數,那麼後面可能有正,不必要保留負值;如果當前值是正,那麼後面可能會有值使它增加。

例如: [-,-,-],pre_sub_sum 會保留最大的負值;[-, -, +], sub_sum 會取到正值,並賦給pre_sub_sum;[-, +, -],pre_sub_sum 會存到正值;[-, +, +], sub_sum 會儲存到兩個正數;[+, -, -], pre_sub_sum 會保留最大值;[+, -, +], sub_sum 會累加到最大值;[+, +, -], pre_sub_sum 會儲存最大值;[+, +, +], sub_sum 會累計最大值。

經驗教訓:因為過度的細化,很久都沒寫出來,化繁為簡不止可以精簡**,還可以理清思路。

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...