自己想的,事件空间复杂度都有点高了,暴力解法:用两个数组存前、后遍历的和,再遍历判断是否有相等的
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int num=in.nextInt();
long[] arr=new long[num];
int i=0;
// 注意 hasNext 和 hasNextLine 的区别
while (in.hasNextInt()&&i<num) { // 注意 while 处理多个 case
arr[i]=in.nextInt();
i++;
}
//sum1,sum2存前后遍历的和
long[] sum1=new long[num];
long[] sum2=new long[num];
sum1[0]=arr[0];
sum2[num-1]=arr[num-1];
for(int j=1;j<num;j++){
sum1[j]=arr[j]+sum1[j-1];
}
for(int j=num-2;j>=0;j--){
sum2[j]=arr[j]+sum2[j+1];
}
int p=-1,q=num;
for(int m=0,n=num-1;m<=n;){
if(sum1[m]==sum2[n]){
p=m;
q=n;
m++;
n--;
}else if(sum1[m]>sum2[n]){
n--;
}else{
m++;
}
}
//输出结果
if(p==-1){
System.out.println(0);
}else{
System.out.println(sum1[p]);
}
}
}

京公网安备 11010502036488号