题目意思是说给出 n 段木材L[i], 将这 n 段木材切分为至少 k 段,这 k 段等长,求能从 n 段原材料中获得的最长单段木材长度。以 k=7 为例,要将 L 中的原材料分为7段,能得到的最大单段长度为114, 232/114 = 2, 124/114 = 1, 456/114 = 4, 2 + 1 + 4 = 7.
public int woodCut(int[] L, int k) {
int left = 0;
int right = Integer.MAX_VALUE;
while(left+1<right){
int mid = left + (right-left)/2;
if(count(L,k,mid)){
left = mid;
}
else{
right = mid;
}
}return left;
}
public boolean count(int[] L, int k, int x){
int sum = 0;
for(int l : L){
sum = sum + l/x;
}
return sum>=k;
}