题目描述
思路分析
我们试着从头到尾累加数组中的每个数字。初始化和为0。
第一步加上第一个数字1,此时和为1。
第二步加上第二个数字-2,此时和为-1。小于0,那么用-1加上3为2,比3本身还小。也就是说从第一个数字开始的子数组比从第三个数字开始的子数组小。因此不必考虑从第一个数字开始的子数组。
第三步,从第三个数开始累加。继续第一步,第二步,直到最后。
代码实现
public class Solution {
public int FindGreatestSumOfSubArray(int[] array) {
if(array == null || array.length < 1){
return 0;
}
int currentSum = 0;
int greateSum = 0x80000000;
int length = array.length;
for(int i=0; i < length; i++){
// 如果当前和小于等于0,那么将当前值更新为将会访问的元素
if(currentSum <= 0){
currentSum = array[i];
}else{
// 如果当前值大于0,加上将要访问的元素
currentSum += array[i];
}
// 比较当前值与当前最大值,更新当前最大值
if(currentSum > greateSum){
greateSum = currentSum;
}
}
return greateSum;
}
}