3.25 阿里笔试 第二题分析
做题的时候卡了好久,当时都没有思路,明明实例都过了,提交还是0.
看了广大网友的帖子,发现其中一个暴力的方法,每次降序排序,扣完之后,再进行排序。这样子时间复杂度太高,只能过40%。
然后发现lc2141 是跟这道题是类似的, 具体可以自己去看题解。
import java.util.*; public class Main{ public static void main(String args[]){ Scanner in = new Scanner(System.in); int t = in.nextInt(); for (int i = 0; i < t; i++){ int[] data = new int[5]; for (int j = 0; j < 5; j++){ data[j] = in.nextInt(); } System.out.println(maxTime(data)); } } public static long maxTime(int[] data) { int n = 4; var tot = 0L; for (var b : data) { tot += b; } var l = 0L; var r = tot / n; while (l < r) { var x = (l + r + 1) / 2; var sum = 0L; for (var b : data) { sum += Math.min(b, x); } if (n * x <= sum) { l = x; } else { r = x - 1; } } return l; } }