LeetCode53.Maximum Subarray
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
.
意思是找一个子数组,下标必须连续且各个值的和最大。
很容易知道一些基本规则,比如当读到数组的某一个数字时发现,前面已经求到的和,与自己本身加起来之后反而小于自己,这种情况下前面的和肯定就会舍弃了,新的和又从当前开始算起(这是唯一一种会开启一个新的求和的可能)。如果不是上述情况,就直接将这个数加到和里,然而这种情况不是那么单纯,加了之后有可能比原和小也可能比原和大,所以说是很有可能在某个位置已经出现了最大和但再加上一个数后就变小了的情况。所以我们需要一个时时监控这个最大和的temp,让他保存从头到尾算出来的所有和中最大的那个。时间性能在O(N)中。
另外一种办法是分治法,如果把数组分成两半,那么这个数组的最大连续子和肯定是两个子数组中大的一个,当然,加入这两个子数组刚好头尾相连,那么这个和还有可能是两个值的和。采用递归的思想,基本情形就是当子数组里只有一个数的时候,就返回那个数,否则就返回该子数组的左子数组的和,右子数组的和,以及可能连续时的两个子和的和中的最大值。