Python編程題20--最大子序和

題目

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

例如:

給定一個列表:[-2, 1, -3, 4, -1, 2, 1, -5, 4],返回結果:6

給定一個列表:[-1],返回結果:-1

實現思路1

  • 直接暴力破解,但是需進行2層遍歷
  • 第一層遍歷設置當前子列表的起始位置 i,第二層遍歷設置當前連續子列表的結束位置 j
  • 每次遍歷時尋找出遍歷到當前位置的最大子序和 res

代碼實現

def maxSubArray(nums):
    res = nums[0]
    for i in range(len(nums)):
        sum = 0
        for j in range(i, len(nums)):
            sum += nums[j]
            res = sum if res < sum else res
    return res

實現思路2

  • 只進行一層遍歷,需設置 res 表示遍歷到當前位置的最大子序和,sum表示當前連續子列表的元素之和
  • 遍歷時候,如果sum小於0,那麼針對後面計算 sum + i < 0 + i,所以就可以把前面元素都丟掉,即sum=0,然後從下一元素開始重新計算sum

代碼實現

def maxSubArray(nums):
    res, sum = nums[0], 0
    for i in nums:
        sum += i
        res = sum if res < sum else res
        sum = 0 if sum < 0 else sum
    return res
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章