1.1最大子列和问题
在线处理法
import java.util.Scanner;
public class Main{
public static void main(String[]arg){
Scanner sc=new Scanner(System.in);
int K=sc.nextInt();
int[] a= new int[K];
for(int i=0;i<K;i++){
a[i]=sc.nextInt();}
int max=0;
int sum=0;
for(int t=0;t<K;t++){
sum+=a[t];
if(sum>max){
max=sum;
}
else if(sum<0){
sum=0;
}
}
System.out.println(max);
}
}
1.2 Maximum Subsequence Sum
在线处理法
import java.util.Scanner;
//最大子列和
public class Main {
public static int first,last;
public static int finalFirst,finalLast;
public static int maxsum(int[] a,int K){
int sum=0;
int max=0;
int tmp=0;
for(int t=0;t<K;t++){
sum+=a[t];
if(sum>max){
max=sum;
first=tmp;
last=t;
}
else if(sum<0){
sum=0;
tmp=t+1;
}
}
//解决负数和0
if(max==0){
finalFirst=0;
finalLast=0;
}else {
finalFirst=a[first];
finalLast=a[last];
}
return max;
}
public static void main(String[]arg){
Scanner sc=new Scanner(System.in);
int K=sc.nextInt();
int[] a= new int[K];
for(int i=0;i<K;i++){
a[i]=sc.nextInt();}
//解决负数
boolean flag=true;
for(int i=0;i<K;i++){
if(a[i]>=0){
flag=false;
}
}
if(flag){
System.out.println(0+" "+a[0]+" "+a[K-1]);
}else{
System.out.println(maxsum(a,K)+" "+finalFirst+" "+finalLast);
}
}
}
不知道为什么一直超时。。。