分数组的用贪心,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

相关推荐

02-16 10:35
已编辑
西安科技大学 后端
虚闻松声:整体应该挺好了 项目2-3个就够了。都类似第一段这么写。 构建数据闭环 推动工程创新 优化架构设计 免费修改简历,就业咨询,欢迎私信交流。
点赞 评论 收藏
分享
牛客网
牛客企业服务