木材加工(LintCode)
木材加工
有一些原木,现在想把这些木头切割成一些长度相同的小段木头,需要得到的小段的数目至少为 k
。当然,我们希望得到的小段越长越好,你需要计算能够得到的小段木头的最大长度。
有3根木头[232, 124, 456]
, k=7
, 最大长度为114
.
木头长度的单位是厘米。原木的长度都是正整数,我们要求切割得到的小段木头的长度也要求是整数。无法切出要求至少 k 段的,则返回 0
即可。
O(n log Len), Len为 n 段原木中最大的长度
要达到n*log Len ,可以想到的是用折半查找。需要注意的是不一定要将所有的木头都切了,过短的木头可以不切(一开始我认为所有的木头都需要切,或者说最后的长度不能超过最短的木头,于是拿到了一个WA)。第一次遍历数组,求和并求得最大值。若和小于k,则返回0.接下来在1—max之间用折半查找,找到最大的长度。
1 public class Solution { 2 /** 3 *@param L: Given n pieces of wood with length L[i] 4 *@param k: An integer 5 *return: The maximum length of the small pieces. 6 */ 7 public int woodCut(int[] L, int k) { 8 if (L.length == 0) { 9 return 0; 10 } 11 long sum = L[0]; 12 long max = L[0]; 13 14 for (int i=1;i<L.length;i++) { 15 sum += L[i]; 16 max = Math.max(L[i],max); 17 } 18 if (sum < k) { 19 return 0; 20 } 21 22 long i = 1; 23 long j = max; 24 25 while(i <= j) { 26 long mid = (i + j) / 2; 27 if (judge(L,k,mid)) { 28 i = mid + 1; 29 }else { 30 j = mid - 1; 31 } 32 } 33 34 return (int)j; 35 } 36 37 public boolean judge(int[] L,int k,long l){ 38 int num = 0; 39 for (int x : L) { 40 num += x/l; 41 } 42 if (num >= k) { 43 return true; 44 } 45 return false; 46 } 47 }
转载于:https://www.cnblogs.com/FJH1994/p/5041529.html
木材加工(LintCode)相关推荐
- LintCode : 木材加工
LintCode : 木材加工 题目 有一些原木,现在想把这些木头切割成一些长度相同的小段木头,需要得到的小段的数目至少为 k.当然,我们希望得到的小段越长越好,你需要计算能够得到的小段木头的最大长度 ...
- LintCode 183. 木材加工(二分查找)
1. 题目 有一些原木,现在想把这些木头切割成一些长度相同的小段木头,需要得到的小段的数目至少为 k.当然,我们希望得到的小段越长越好,你需要计算能够得到的小段木头的最大长度. 样例 1 输入: L ...
- LintCode 木材加工
问题描述: 有一些原木,现在想把这些木头切割成一些长度相同的小段木头,需要得到的小段的数目至少为 k.当然,我们希望得到的小段越长越好,你需要计算能够得到的小段木头的最大长度. 样例: 有3根木头[2 ...
- LintCode 183.木材加工
有一些原木,现在想把这些木头切割成一些长度相同的小段木头,需要得到的小段的数目至少为 k.给定L和k,你需要计算能够得到的小段木头的最大长度. 二分法 小段木头的长度区间为[0,最长的那根木头] 对长 ...
- LintCode解题目录
看见 LintCode 的代码能力测试CAT(Coding Ability Test)挺好,有倒计时,挺有面试紧迫感.做个记录. 另有本人 LeetCode解题目录.<程序员面试金典>解题 ...
- LintCode 249. 统计前面比自己小的数的个数
给定一个整数数组(下标由 0 到 n-1, n 表示数组的规模,取值范围由 0 到10000).对于数组中的每个 ai 元素,请计算 ai 前的数中比它小的元素的数量. 注意事项 We suggest ...
- LintCode: Max Tree
题目 Given an integer array with no duplicates. A max tree building on this array is defined as follow ...
- 【LintCode: 3. 统计数字】算法题解析
这是一道来自LintCode的算法题目,本文用C++来解答这道题,链接为: https://www.lintcode.com/problem/digit-counts/description 题目描述 ...
- LintCode 1.A+B的问题
LintCode 1.A+B的问题 描述 给出两个整数 a 和 b , 求他们的和. 答案 public class Solution {/*** @param a: An integer* @par ...
最新文章
- OpenVINO + OpenCV实现车辆检测与道路分割
- 通过Java字节码发现有趣的内幕之String篇(上)(转)
- 【Win32汇编】测试Irvine32库
- python socket能做什么_用python写一个聊天小程序!和女朋友的专属聊天工具!
- easyui打开新的选项卡_IntelliJ IDEA 2020.3 正式版发布,多项超酷新功能
- Bootstrap的全局css样式部分
- Java最佳实践–高性能序列化
- 【Vue案例一】实现跑马灯效果
- 解决VMware在Windows 7上无法上网的问题
- m5310模组数据上传至onenet_彻底火了的NB-IoT突破1亿大关(附最新芯片和模组厂)!...
- VMware Workstation pro无法在Windows上运行的解决方法
- 算法设计与分析期末复习
- spwm matlab仿真,H桥逆变器SPWMMATLAB仿真
- workerman php使用,workerman怎么用
- vbox虚拟机 做服务器,vbox虚拟机设置服务器(vbox虚拟机做服务器)
- win7 匿名共享目录
- 常见的Web服务器、应用服务器(Apache、tomcat、jetty、Nginx)简介及优缺点总结
- 前端开发:npm install 报错npm ERR! Cannot read property ‘extraneous‘ of undefined的解决方法
- “一文读懂”系列:AMS是如何动态管理进程的?
- 电梯控制算法(5)单电梯场景——屏蔽较近楼层进梯请求
热门文章
- 694. Number of Distinct Islands
- 微信小程序支付(基于Java实现微信JSAPI支付):支付,提现,退款
- Python 装饰器-基本概念
- Android显示MP3专辑封面
- TFmini和TFmini-Plus——激光雷达模组 资料汇总
- 医药生物行业:疫情反复,2021年医药板块如何演绎(20210103).PDF
- 人人都想买湖景房!湖景房优缺点你知道吗?
- 【数量技术宅|金融数据分析系列分享】套利策略的价差序列计算,恐怕没有你想的那么简单
- Centos7 二进制安装 Kubernetes 1.13
- java调用ocr识别api_Java文字识别软件-调用百度ocr实现文字识别