Tag
Array\Dynamic Programming\Divide and Conquer
Difficulty
Easy
Description
Find the contiguous subarray within an array (containing at least one number) which has the largest sum.
For example, given the array [-2,1,-3,4,-1,2,1,-5,4],
the contiguous subarray [4,-1,2,1] has the largest sum = 6.
Code
- DP
class Solution(object):
def maxSubArray(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
DP = nums[0]
Ret = nums[0]
for i in range(1,len(nums)):
DP = max(DP+nums[i],nums[i])
Ret = max(DP,Ret)
return Ret
- Divide and Conquer
class Solution(object):
def dac(self,n):
if len(n)==1:
return n[0],n[0],n[0],n[0]
left_1,right_1,total_sum_1,max_sum_1 = self.dac(n[0:len(n)/2])
left_2,right_2,total_sum_2,max_sum_2 = self.dac(n[len(n)/2:])
left = max(left_1,total_sum_1+left_2)
right = max(right_2,right_1+total_sum_2)
total_sum = total_sum_1 + total_sum_2
max_sum = max(left_2+right_1,max(max_sum_1,max_sum_2))
return left,right,total_sum,max_sum
def maxSubArray(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
left,right,total_sum,max_sum = self.dac(nums)
return max_sum
left,以数组最左边开始得到的最大和
right, 以数组最右边结束得到的最大和
total_sum,数组的和
max_sum,数组中的最大和