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;
}
} 