題目:
給定乙個整數陣列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...