最大连续子序列算法代码简化至23行
问题:给定K个整数的序列{ N1, N2, …, NK },其任意连续子序列可表示为{ Ni, Ni+1, …, Nj },其中 1 <= i <= j <= K。最大连续子序列是所有连续子序列中元素和最大的一个, 例如给定序列{ -2, 11, -4, 13, -5, -2 },其最大连续子序列为{ 11, -4, 13 },最大和为20,请输出该子序列的第一个和最后一个元素的下标并计算最大子序列和。
源代码:
public class MaxSerialArray {
public static void main(String args[]) {
int arr[]= {-10,1,2,3,4,-5,-23,3,7,8,-21};
System.out.println("Max Sum: "+find(arr));
}
static int find(int arr[]) {
int x=arr[0],y=x,t=0,t1=0,t2=0;
for(int i=0;i<arr.length;i++) {
if(x<0) {
x=0;
t1=i;
}
x+=arr[i];
if(x>y) {
y=x;
t2=i;
t=t1;
}
}
System.out.println("Subscript:"+t+" to "+t2);
return y;
}
}
运行结果: