給定乙個整數陣列nums
,找到乙個具有最大和的連續子陣列(子陣列最少包含乙個元素),返回其最大和。
示例:
輸入:[-2,1,-3,4,-1,2,1,-5,4],輸出:6解釋:連續子陣列 [4,-1,2,1] 的和最大,為 6。高階:
如果你已經實現複雜度為 o(n) 的解法,嘗試使用更為精妙的分治法求解。
思路:用dp[i]表示以下標為i的元素為結尾的最大子序和,
當i = 0時,dp[0] = nums[0]
當i = 1時,如果要跟前i-1個元素聯絡起來,就是dp[i-1] + nums[1]
如果不連起來,只考慮它自身,就是nums[1]
因為題目要求最大,所以dp[1] = max(dp[i-1] + nums[1], nums[1])
以此類推,當dp[i-1]為正數的情況下,才有必要連起來,否則還不如nums[i]自己乙個數字來的大
class solution(object):
def maxsubarray(self, nums):
""":type nums: list[int]
:rtype: int
"""if not nums:
return 0
dp = [nums[0]]
res = dp[0]
for i in range(1, len(nums)):
if dp[-1] > res:
res = dp[-1]
return res
LeetCode Python 打家劫舍I
你是乙個專業的小偷,計畫偷竊沿街的房屋。每間房內都藏有一定的現金,影響你偷竊的唯一制約因素就是相鄰的房屋裝有相互連通的防盜系統,如果兩間相鄰的房屋在同一晚上被小偷闖入,系統會自動報警。給定乙個代表每個房屋存放金額的非負整數陣列,計算你在不觸動警報裝置的情況下,能夠偷竊到的最高金額。示例 1 輸入 1...
leetcode Python編碼練習
貪心演算法 1.環形路上有n個加油站,第i個加油站的汽油量是gas i 你有一輛車,車的油箱可以無限裝汽油。從加油站i走到下乙個加油站 i 1 花費的油量是cost i 你從乙個加油站出發,剛開始 的時候油箱裡面沒有汽油。求從哪個加油站出發可以在環形路上走一圈。返回加油站的下標,如果沒有答案的話返回...
leetcode Python實現 70 爬樓梯
描述 假設你正在爬樓梯。需要 n 步你才能到達樓頂。每次你可以爬 1 或 2 個台階。你有多少種不同的方法可以爬到樓頂呢?注意 給定 n 是乙個正整數。示例1 輸入 2 輸出 2 解釋 有兩種方法可以爬到樓頂。1.1 步 1 步 2.2 步 示例2 輸入 3 輸出 3 解釋 有三種方法可以爬到樓頂。...