53 最大子序和

2021-09-16 12:49:21 字數 1186 閱讀 8640

題目:

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

示例:

輸入:[-2,1,-3,4,-1,2,1,-5,4],輸出:6解釋:連續子陣列 [4,-1,2,1] 的和最大,為 6。
思路:

因為要考慮連續,所以需注意兩點,與當前比較的必定包含當前節點的上乙個節點,前n個節點的最大字串不一定包含n,但是與n+1進行計算的字串必須包含n

1.當陣列存在整數時,其最大值應為正數最多時,都為負數時,其最大值為最大的負數

以此思路進行設計,採用變數res儲存當前遍歷數列後的最大值,變數sumn儲存當前數列的相加之和,當sumn為負值時,後續值與其相加必變小,所以令其為0.

2.動態規劃,f[n] = max(f[n-1]+a[n],a[n])

思路1

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

res = nums[0]

sumn = 0

for i in nums:

if sumn > 0:

sumn += i

else:

sumn = i

res = max(res,sumn)

return res

思路2 陣列中第i個節點儲存前i個序列中和結尾到i的最大值,整個陣列的最大值為。因為要求連續子串行,所以要求結尾到i

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

res = nums[0]

sumn = 0

for i in nums:

sumn = max(sumn+i,i)

res = max(res,sumn)

return res

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

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

nums[i] = max(nums[i-1] + nums[i],nums[i])

return max(nums)

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。高階 如果你已經實現複雜度為 o n 的解法,嘗試使用更為精妙的分治法求解。package le...

53 最大子序和

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