Given n pieces of wood with length L[i] (integer array). Cut them into
small pieces to guarantee you could have equal or more than k pieces
with the same length. What is the longest length you can get from the
n pieces of wood? Given L & k, return the maximum length of the small
pieces.Example For L=[232, 124, 456], k=7, return 114.
Note You couldn’t cut wood into float length.
Challenge O(n log Len), where Len is the longest length of the wood.
这题不简单,思路比较新奇。
思路:划分的最大段的长度在1和L[i]中最大的之间。可以用二分查找来寻找最大的划分长度。
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 numCut(vector<int> L,int l){
int num=0;
for(int i=0;i<L.size();i++){
num+=L[i]/l;
}
return num;
}
int woodCut(vector<int> L, int k) {
// write your code here
int res=0;
int max_L=0;
for(int i=0;i<L.size();i++){
if(L[i]>max_L){
max_L=L[i];
}
}
int left=1,right=max_L;
while(left<=right){
int mid=left+(right-left)/2;
int num=numCut(L,mid);
if(num<k){
right=mid-1;
}else{
res=mid;///!!!
left=mid+1;
}
}
return res;
}
};