面试题42:连续子数组的最大和
题目描述
输入一个整型数组,数组里有正数也有负数。数组中一个或连续的多个整/数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。
问题分析
输入数组{1、-2、10、-4、7、2、-5}
很容易看出从第一个数字开始累加,若走到某一个数字时,前面的累加和为负数,说明不能继续累加了。比如1 和 -2累加后值为-1,后面的数字加上-1反而变小了,应舍弃。要从接下来的数字重新开始累加。注意在累加过程中,将每次累加和的最大值记录下来,遍历完成后,返回该数字。
问题解答
// 标识是否是无效输入
boolean InvalidInput = false;
public int FindGreatestSumOfSubArray(int[] array) {
if(array==null || array.length<=0){
InvalidInput = true;
return 0;
}
InvalidInput = false;
int sum=array[0];
int maxSum=array[0];
for(int i=1;i<array.length;i++){
if(sum<0) {
sum = array[i];
} else {
sum += array[i];
}
if(sum>maxSum) {
maxSum=sum;
}
}
return maxSum;
}
原文地址:https://www.cnblogs.com/JefferyChenXiao/p/12246457.html
时间: 2024-10-08 20:04:37