問題描述:
給定乙個整數陣列nums
,找到乙個具有最大和的連續子陣列(子陣列最少包含乙個元素),返回其最大和。
示例:
輸入:[-2,1,-3,4,-1,2,1,-5,4],輸出:6解釋:連續子陣列 [4,-1,2,1] 的和最大,為 6。時間超限: 暴力窮舉
1class
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:
當前值的大小與前面的值之和比較,若當前值更大,則取當前值,捨棄前面的值之和
1class
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:(分治法)對半分,求左邊最大,右邊最大,以及邊界最大 ,
返回最大值
1class
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 的解法,嘗試使用更為精妙的分治法求解。在本題中,我想到的兩...