lintcode:Wood Cut

来源:互联网 发布:生死狙击球棒数据变异 编辑:程序博客网 时间:2024/04/28 00:52

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;    }};
1 0
原创粉丝点击