分数组的用贪心,AC了,忽略我代码中用的前缀和(刚开始以为是直接切数组,所以用了个前缀和,搞错了,但是那样也过了85%,迷~) private static void run3() { Scanner scanner = new Scanner(System.in); int N = scanner.nextInt(); long[] num = new long[N + 1]; long[] preSum = new long[N + 1]; preSum[0] = 0; for (int i = 1; i <= N; ++i) { num[i] = scanner.nextLong(); preSum[i] = preSum[i - 1] + num[i]; } Arrays.sort(num); for (int i = 1; i <= N; ++i) preSum[i] = preSum[i - 1] + num[i]; long tmp1 = num[N]; long tmp2 = 0; for (int i = N - 1; i > 0; --i) { int t = i; while (i > 0 && tmp1 >= tmp2) { tmp2 += num[i]; --i; } while (i > 0 && tmp1 <= tmp2) { tmp1 += num[i]; --i; } if (t != i) i++; } System.out.println(Math.abs(tmp1 - tmp2)); // 下面的代码过了85% // long res = Long.MAX_VALUE; // for (int i = 1; i < N; ++i) { // res = Math.min(res, Math.abs(preSum[N] - preSum[i] - preSum[i])); // } // System.out.println(res); scanner.close(); }
点赞 2

相关推荐

10-29 18:20
济南大学 Java
用微笑面对困难:他不是人事吗,怎么净特么不干人事
点赞 评论 收藏
分享
12-22 16:31
已编辑
桂林电子科技大学 Python
点赞 评论 收藏
分享
牛客网
牛客网在线编程
牛客网题解
牛客企业服务