lintcode:Wood Cut
2016-01-26 16:21
295 查看
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]中最大的之间。可以用二分查找来寻找最大的划分长度。
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; } };
相关文章推荐
- Random类
- android keystore 找回密码
- Aspose Word 导入
- 【从0到1学Web前端】CSS伪类和伪元素
- 数据库的基本操作
- html行级元素与块级元素的比较
- 卡特兰数
- python代码片段——获得三天前时间
- Spring <context:annotation-config/> 解说
- 安全测试之XPath注入攻击
- java网络编程(二)复用Socket连接以及使用多线程完成多个客户端的连接
- Latex Picture And Table Setting
- 13.文件加载与保存
- JAVA多线程和并发基础面试问答
- android之播放多媒体文件一(播放音频)
- Angularjs 初始化未加载完毕闪烁问题解决 ng-cloak
- Solr功能应用
- 矩形的计算
- 矩阵高速幂
- 数据库--PHP环境搭建