LeetCode 053 最大子序和

2022-06-13 18:06:09 字數 2991 閱讀 4067

問題描述:

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

示例:

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

時間超限:  暴力窮舉

1

class

solution(object):

2def

maxsubarray(self, nums):

3"""

4:type nums: list[int]

5:rtype: int

6"""

78 max =nums[0]

9if len(nums) == 1:

10return

nums[0]

11 res =0

12for step in range(len(nums)):#

step 控制連續加的個數

13for i in range(len(nums)-step):#

i控制從第幾個開始加

14for j in range(step+1):

15 res +=nums[i]

16 i += 1

17if res >max:

18 max =res

19 res =0

20return max

方法1:

當前值的大小與前面的值之和比較,若當前值更大,則取當前值,捨棄前面的值之和

1

class

solution(object):

2def

maxsubarray(self, nums):

3"""

4:type nums: list[int]

5:rtype: int

6"""

7if len(nums) ==0:

8return

09 presum = maxsum =nums[0]

10for i in xrange(1, len(nums)):

11 presum = max(presum +nums[i], nums[i])

12 maxsum =max(maxsum, presum)

13return maxsum

方法2:(分治法)對半分,求左邊最大,右邊最大,以及邊界最大 ,

返回最大值

1

class

solution(object):

2def

maxsubarray(self, nums):

3"""

4:type nums: list[int]

5:rtype: int

6"""

7def

maxsum(alist, left, right):8#

遞迴返回條件

9if left >=right:

10return alist[left] #

return原值,不是return 0

1112 middle = (left + right) // 2 #

記得打括號,去(time)調了老半天

13 leftmax =maxsum(alist, left, middle)

14 rightmax = maxsum(alist, middle+1, right)

1516

#求左邊界最大值

17 leftboardsum, leftboardmax =0, alist[middle]

18for i in range(middle, left-1,-1): #

左段最右端沒有取到middle

19 leftboardsum +=alist[i]

20if leftboardsum >leftboardmax:

21 leftboardmax =leftboardsum

2223

#求右邊界最大值

24 rightboardsum, rightboardmax = 0, alist[middle+1]

25for j in range(middle+1, right+1): #

右段最右端取到了right

26 rightboardsum +=alist[j]

27if rightboardsum >rightboardmax:

28 rightboardmax =rightboardsum

2930

#邊界最大值

31 boardmax = leftboardmax +rightboardmax

3233

return

max(leftmax, rightmax, boardmax)

3435

36if nums ==:

37return038

39 left =0

40 right = len(nums)-1

41 res = maxsum(nums, left, right) #

left,right為左右下標

42return res

2018-07-24 11:11:59

Leetcode053 最大子序和

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

LeetCode053 最大子序和

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

leetcode最大子序和

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