前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >天池 在线编程 木材加工(二分查找)

天池 在线编程 木材加工(二分查找)

作者头像
Michael阿明
发布2021-02-19 15:03:36
3550
发布2021-02-19 15:03:36
举报
文章被收录于专栏:Michael阿明学习之路

文章目录

1. 题目

有一些原木,现在想把这些木头切割成一些长度相同的小段木头,需要得到的小段的数目至少为 k。 当然,我们希望得到的小段越长越好,你需要计算能够得到的小段木头的最大长度

木头长度的单位是厘米。原木的长度都是正整数,我们要求切割得到的小段木头的长度也要求是整数。 无法切出要求至少 k 段的,则返回 0 即可。

代码语言:javascript
复制
示例
样例 1
输入:
L = [232, 124, 456]
k = 7
输出: 114
Explanation: 我们可以把它分成114cm的7段,而115cm不可以

样例 2
输入:
L = [1, 2, 3]
k = 7
输出: 0
说明:很显然我们不能按照题目要求完成。

https://tianchi.aliyun.com/oj/231203672248052266/245580596369363585

2. 解题

  • 二分查找模板题
代码语言:javascript
复制
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 l = 1, r = INT_MAX, mid, maxlen = 0;
        while(l <= r)
        {
        	mid = l+((r-l)/2);
        	if(ok(L, mid, k))// 每段 mid 长度,能切出来 k 根吗
        	{
        		maxlen = mid;
        		l = mid+1;
        	}
        	else
        		r = mid-1;
        }
        return maxlen;
    }
    bool ok(vector<int> &L, int len, int k)
    {
    	int count = 0;
    	for(int i = 0; i < L.size(); i++)
    	{
    		count += L[i]/len;
    	}
    	return count >= k;
    }
};

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/12/26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 1. 题目
  • 2. 解题
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档