自己想的,事件空间复杂度都有点高了,暴力解法:用两个数组存前、后遍历的和,再遍历判断是否有相等的
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]); } } }