1、题目
2、思路及代码
设置两个变量,当前和tempSum和要求返回的最终和finalSum(需足够小,因为该数组可能全为负),根据数学运算可知,tempSum小于0时,与后续元素的和一定小于该元素的值,因此可舍弃该元素之前的数据从该元素开始重新查找数组。注意需要判断的是tempSum是否小于0而不是该元素是否小于0,例如{-4}小于0,但是{3,10,-4,-7}的和大于{3,10,-4},因此,每进行过一个当前元素的处理后,都需要对tempSum和finalSum进行一次比较,finalSum数据更新为二者的较大值。
此外,为保证算法的健壮性,需要对数组为空时进行判断,返回值为int型,无法判断是否返回值为最终数组的和,因此可另外设置输入是否无效的布尔型值尽心辅助判断。
public class Solution {
Boolean invalIp = false;
public int FindGreatestSumOfSubArray(int[] array) {
if(array.length == 0){
invalIp = true;
return 0;
}
int tempSum = 0;
int finalSum = -1008611;
for( int i = 0;i < array.length;i++){
if (tempSum <= 0){
tempSum = array[i];
}else{
tempSum = tempSum + array[i];
}
if(tempSum > finalSum){
finalSum = tempSum;
}
}
return finalSum;
}
}
java中int型 取值范围:-2^31——2^31-1,即-2147483648——2147483647