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 largestsum = 6
.
More practice:
If you have figured out the O(n) solution, try coding another solution using the divide and conquer approach, which is more subtle.
Solution:
Use Dynamic Programming.
Complexity:
O(n)
The part that is commented is used to return the subarray.
__author__ = 'burger'
import operator
class Solution:
# @param {integer[]} nums
# @return {integer}
def maxSubArray(self, nums):
n = len(nums)
contain = [0] * n
# ncon = [0] * n
#l = [0] * n
contain[0] = nums[0]
# ncon[0] = max(nums[0],0)
# l[0] = 1
for i in range(1,n):
if nums[i] > nums[i] + contain[i - 1]:
contain[i] = nums[i]
# l[i] = 1
else:
contain[i] = nums[i] + contain[i - 1]
# l[i] = l[i - 1] + 1
#idx,val = max(enumerate(l),key = operator.itemgetter(1))
return max(contain)
if __name__ == '__main__':
s = Solution()
print(s.maxSubArray([-2,1,-3,4,-1,2,1,-5,4]))