Wood Cut
For L=[232, 124, 456], k=7, return 114.Basic Idea:
Java Code:
public class Solution {
/*
* @param L: Given n pieces of wood with length L[i]
* @param k: An integer
* @return: The maximum length of the small pieces
*/
public int woodCut(int[] L, int k) {
long sum = 0; // 用int可能会溢出
int max = Integer.MIN_VALUE;
for (int l : L) {
sum += l;
max = Math.max(max, l);
}
if (k > sum) return 0; // 此时即使每段长度都是1也无法切出k段,所以返回0
int p = 1, r = max;
while (p + 1 < r) {
int q = p + (r - p) / 2;
if (isValid(L, k, q)) p = q;
else r = q;
}
if (isValid(L, k, r)) return r;
else return p;
}
private boolean isValid(int[] L, int k, int target) {
int num = 0;
for (int l : L) {
num += l / target;
}
return num >= k;
}
};