1:题目描述
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
.
找出一组数字中最大的连续数字的和
2:题目分析
这个题,一看就感觉特别容易,用了双指针然后就贴了代码。然额……
之后在网上搜了一下,原来还有神奇的“线性时间算法”,遍历一次直接出结果 w(゚Д゚)w
①设i<=k<=j,max=Σnums[i,j],如果Σnums[i,k]<0,则Σnums[k,j]>Σnums[i,j],假设不成立,所以说和最大的连续数字中不会有连续数字前缀为负的情况。
②在这组数字中取断点,把前缀为负的情况分离开,之后比较大小
3:解题思路
1 def maxSubArray(self, nums): 2 """ 3 :type nums: List[int] 4 :rtype: int 5 """ 6 i=0 7 sum=0 8 max_sum=-2**31 #把最大值设为最小 9 while i<len(nums): 10 sum+=nums[i] #只计算前缀的数字和 11 max_sum=max(sum,max_sum) #取数值最大的前缀和 12 if sum<0: #遇见前缀为零的情况,sum归零 13 sum=0 14 i=i+1 15 return max_sum
4:解题感悟
这个算法真的好神奇,长见识了(#^.^#)