leetcode 53 最大自序和

2021-09-29 06:10:22 字數 994 閱讀 2007

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

示例:

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

輸出: 6

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

高階:

如果你已經實現複雜度為 o(n) 的解法,嘗試使用更為精妙的分治法求解。

思路

簡單題,維護兩個和sum和_sum , 其中sum 用來儲存答案的值,_sum用來儲存臨時的值,使用雙指標來降低時間複雜度。

index1 和 index2 之間維護著臨時的_sum值。如果index1 到 index2 的子串行_sum大於0,最終的最大和對應的序列一定會包含這段子序列。所以在搜尋的過程中只要在包含這個子串行中的序列中進行就可以了。

具體**如下:

class solution:

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

length = len(nums) # 提取列表的長度

index1 = index2 = 0 # 雙指標

sum = float("-inf") # 用來表示負無窮大

_sum = 0

while(index2 < length):

_sum += nums[index2] # 維護當前的sum

if(_sum > sum): #當前的sum 小於_sum 時更新

sum =_sum

if _sum < 0 : # _sum 小於零的時候那麼說明兩個指標之間的和為負數,重新更新index1,index2

_sum = 0

index1 = index2

index2 +=1

return sum

leetcode 53 最大自序和

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

LeetCode53最大子序和

給定乙個序列 至少含有 1 個數 從該序列中尋找乙個連續的子串行,使得子串行的和最大。例如,給定序列 2,1,3,4,1,2,1,5,4 連續子串行 4,1,2,1 的和最大,為6。擴充套件練習 若你已實現複雜度為 o n 的解法,嘗試使用更為精妙的分治法求解。一開始用的最簡單最直接的方法,挨個的把...

LeetCode 53 最大子序和

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