Maximum Subarray
做这个题之后,发现自己真的很LOW。。。
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.
见到这个题,不用多说,第一直接想到从array[0]开始用两个嵌套的循环语句,然后求出答案,这样一来,时间复杂度就是O(n^2),不得不说,这个想法很low
然后,打消了这个念头,又想,有没有什么更高效率的方法,就决定从中间和两头分别开始,这样可以变成O(3n)的时间复杂度。不过实现起来有多了很多代码。。。
接着,就想:既然要最大的,如果从头开始加,如果和为负数就显然可以放弃,因为不包含这一部分的和一定可以更大,那么就可以效仿数据结构的求子字符串的算法:
int sum = 0;
for (int i = 0; i < A.length; i++) {
if (sum < 0)
sum = A[i];
else
sum += A[i];
if (sum > max)
max = sum;
}