首先先声明 这题我只得了88分 有一个点RE(超时)了,但思路是正确的,值得参考一下
import java.util.Arrays;
import java.util.Scanner;
public class Main {
static int n, k;
static int[] arr;
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
n = sc.nextInt();// 数量
k = sc.nextInt();// 需要的小段的数量
arr = new int[n];
for (int i = 0; i < arr.length; i++) {
arr[i] = sc.nextInt();
}
Arrays.sort(arr);
int l = 0;
int r = 100000001;//这个边界值设定需要注意
while (l < r) {
int mid = l+(r-l)/2;//按理说也可以不用/2 而是>>1 但不知道为啥那样就不行
// System.out.println(mid);
if (check(mid)) {// 说明x太小 需要给mid加一下
l = mid+1;
} else {
r = mid;
}
}
System.out.println(r-1);//这里输出l-1或r-1都是可以的
}
public static boolean check(int x) {
int nums = 0;
for (int i = 0; i < n; i++) {
nums+=arr[i]/x;
}
if (nums >= k) {
return true;
} else {
return false;
}
}
}