53 最大子序和

2021-10-06 11:03:38 字數 1441 閱讀 3393

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

示例:

輸入: [-2,1,-3,4,-1,2,1,-5,4],

輸出: 6

解釋: 連續子陣列 [4,-1,2,1] 的和最大,為 6。

思路

1 動態規劃

方法一dp[i]表示到第i為時由第i個數為序列最後乙個數時的最大和

若dp[i-1]>0,果斷連起來

反之,以當前數字序列的第乙個數

每一位時都記錄到目前為止最大的子串行和

class

solution

(object):

defmaxsubarray

(self, nums)

:"""

:type nums: list[int]

:rtype: int

"""max_val = nums[0]

dp =[0

]*len(nums)

dp[0]

= nums[0]

for i in

range(1

,len

(nums)):

if dp[i-1]

>0:

dp[i]

= dp[i-1]

+nums[i]

else

: dp[i]

= nums[i]

max_val =

max(max_val, dp[i]

)return max_val

方法二

class

solution

:def

maxsubarray

(self, nums)

: tmp = nums[0]

ma = tmp

n =len(nums)

for i in

range(1

,n):

# 當當前序列加上此時的元素的值大於tmp的值,說明最大序列和可能出現在後續序列中,記錄此時的最大值

if tmp + nums[i]

>nums[i]

: ma =

max(ma, tmp+nums[i]

) tmp = tmp + nums[i]

else

:#當tmp(當前和)小於下乙個元素時,當前最長序列到此為止。以該元素為起點繼續找最大子串行,

# 並記錄此時的最大值

ma =

max(ma, tmp, tmp+nums[i]

, nums[i]

) tmp = nums[i]

return ma

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