183. Wood Cut
做题历程:
- 第一次做,本次没有解出结果
其实本次不能算完全没有解出,毕竟,已经解出了9成,就是Binary Search的部分,完全没有问题。。
问题出在start和end的判断上,我的start = 1是正确的,但是end搞错了,end应该是所有元素中最大的,因为我们不可能搞出比这个还大的Wood Cut
代码如下:
class Solution {
public:
/**
*@param L: Given n pieces of wood with length L[i]
*@param k: An integer
*return: The maximum length of the small pieces.
*/
int woodCut(vector<int> L, int k) {
// write your code here
int start = 1;
int end = 0;
for (int i = 0; i < L.size(); ++i) {
end = max(end, L[i]);
}
while (start + 1 < end) {
int middle = start + (end - start) / 2;
int piece = calculate(L, middle);
if (piece < k) {
end = middle - 1;
}
else if (piece == k) {
start = middle;
}
else {
start = middle;
}
}
if (calculate(L, end) >= k) {
return end;
}
if (calculate(L, start) >= k) {
return start;
}
return 0;
}
private:
int calculate(const vector<int>& L, int sz) {
int res = 0;
for (int i = 0; i < L.size(); ++i) {
res += L[i] / sz;
}
return res;
}
};