在牛客网刷剑指offer:
提交代码的时候报错:
测试用例:
[1,-2,3,10,-4,7,2,-5]
对应输出应该为:
18
你的输出为:
17
看了评论才发现,原来是我理解错了题目的意思,题目说连续最大子序列和,并没说明一定是从数组的第0个元素开始。
public class Solution {
//这个方法是指定数组都是从0开始计算,找到的连续最大子序列和
public static int FindGreatestSumOfSubArray(int[] array) {
int sum = 0;
int max = array[0];
for (int i : array) {
sum += i;
max=(sum>max?sum:max);
}
return max;
}
//这个方法则是题目要求的连续最大序列和
//需要注意的是,每一次重新开始计算sum=array[i]的时候,要比较一下sum和max避免如下错误:{-2,-3,-1,-4}的max应该是-1,而不是-2
public static int FindGreatestSumOfSubArray2(int[] array) {
int sum = 0;
int max = array[0];
for (int i=0;i<array.length;i++) {
sum = array[i];
max=(sum>max?sum:max);
for (int j = i+1 ; j < array.length; j++) {
sum += array[j];
max=(sum>max?sum:max);
}
}
return max;
}
public static void main(String[] args) {
int[] array = {1,-2,3,10,-4,7,2,-5};
System.out.println(FindGreatestSumOfSubArray(array));
System.out.println(FindGreatestSumOfSubArray2(array));
}
}