最大子序列是要找出由数组成的一维数组中和最大的连续子序列。比如{5,-3,4,2}的最大子序列就是 {5,-3,4,2},它的和是8,达到最大;而 {5,-6,4,2}的最大子序列是{4,2},它的和是6。你已经看出来了,找最大子序列的方法很简单,只要前i项的和还没有小于0那么子序列就一直向后扩展,否则丢弃之前的子序列开始新的子序列,同时我们要记下各个子序列的和,最后找到和最大的子序列。
public static int maxSubSum4(int [] arr){
int maxSum=0;
int thisSum=0;
for(int j=0;j<arr.length;j++){
thisSum+=arr[j];
if(thisSum>maxSum){
maxSum=thisSum;
}
if(thisSum>0){
continue;
}else{
thisSum=0;
}
}
return maxSum;
}
最大子序列参考
最大子序列参考
假如需要找出最大子序列的元素,则可以添加两个索引begin和end,分别用来记录最大子序列的开始和结尾。
public static int maxSubSum4(int [] arr){
int maxSum=0;
int thisSum=0;
int begin=0;
int end=0;
for(int j=0;j<arr.length;j++){
thisSum+=arr[j];
if(thisSum>maxSum){
maxSum=thisSum;
end=j;
}
if(thisSum>0){
continue;
}else{
thisSum=0;
begin=j+1;
}
}
System.out.println(begin);//打印开始的索引
System.out.println(end);//打印结束的索引
return maxSum;
}