珂珂喜欢吃香蕉。这里有 n 堆香蕉,第 i 堆中有 piles[i] 根香蕉。警卫已经离开了,将在 h 小时后回来。

珂珂可以决定她吃香蕉的速度 k (单位:根/小时)。每个小时,她将会选择一堆香蕉,从中吃掉 k 根。如果这堆香蕉少于 k 根,她将吃掉这堆的所有香蕉,然后这一小时内不会再吃更多的香蕉。

珂珂喜欢慢慢吃,但仍然想在警卫回来前吃掉所有的香蕉。

返回她可以在 h 小时内吃掉所有香蕉的最小速度 k(k 为整数)。

示例 1:

输入:piles = [3,6,7,11], h = 8
输出:4
示例 2:

输入:piles = [30,11,23,4,20], h = 5
输出:30
示例 3:

输入:piles = [30,11,23,4,20], h = 6
输出:23

提示:

1 <= piles.length <= 104
piles.length <= h <= 109
1 <= piles[i] <= 109

思路:使用二分法,取值从1-N,防止溢出,mid = (low+high)/2可以转换为int mid = (high - low) / 2 + low; 对pile/speed向上取整可以转换为(pile + speed - 1) / speed;注意total+的范围为long.

二分实现更新:

class Solution {
public:
long GetMax(vector<int> &piles, int k)
{
long time = 0;
for (auto i : piles) {
time += (i + k - 1) / k;
}
return time;
}
int GetMaxId(vector<int> &piles, int h)
{
int low = 1;
int high = 0;
for (auto i : piles) {
high = max(i, high);
}
int res = high;
while (low <= high) {
int mid = (high - low) / 2 + low;
long timeCnt = GetMax(piles, mid);
if (timeCnt > h) {
low = mid + 1;
} else {
high = mid - 1;
res = mid;
}
}
return res;
}
int minEatingSpeed(vector<int> &piles, int h)
{
return GetMaxId(piles, h);
}
};

代码:

#include <iostream>
#include <map>
#include <vector>
#include <algorithm>
#include <math.h>
using namespace std;
long GetMax(vector<int> &piles, int k)
{
long time = 0;
for (auto i : piles) {
time += ceil(i / (k * 1.0)); // (pile + speed - 1) / speed;
}
return time;
}
int GetMaxId(vector<int> &piles, int h)
{
int low = 1;
int high = 0;
for (auto i : piles) {
high = max(i, high);
}
int res = high;
while (low < high) {
int mid = (high + low) / 2; //int speed = (high - low) / 2 + low;
long timeCnt = GetMax(piles, mid);
if (timeCnt > h) {
low = mid + 1;
} else {
high = mid;
res = mid;
}
}
return res;
}
int minEatingSpeed(vector<int> &piles, int h)
{
return GetMaxId(piles, h);
}
int main()
{
vector<int> piles = { 312884470 };
int h = 968709470;
int res = minEatingSpeed(piles, h);
cout << "result: " << res << endl;
return 0;
}

leetcode 875. 爱吃香蕉的珂珂的更多相关文章

  1. [leetcode] 875. 爱吃香蕉的珂珂(周赛)

    875. 爱吃香蕉的珂珂 这题时间要求比较严格... 首先,将piles排序,然后二分查找. 总之,答案K肯定位于piles[?]piles[?+1]或者1piles[0]之间 所以我们先二分把?找到 ...

  2. Leetcode之二分法专题-875. 爱吃香蕉的珂珂(Koko Eating Bananas)

    Leetcode之二分法专题-875. 爱吃香蕉的珂珂(Koko Eating Bananas) 珂珂喜欢吃香蕉.这里有 N 堆香蕉,第 i 堆中有 piles[i] 根香蕉.警卫已经离开了,将在 H ...

  3. [Swift]LeetCode875. 爱吃香蕉的珂珂 | Koko Eating Bananas

    Koko loves to eat bananas.  There are N piles of bananas, the i-th pile has piles[i]bananas.  The gu ...

  4. [LeetCode] 875. Koko Eating Bananas 科科吃香蕉

    Koko loves to eat bananas.  There are N piles of bananas, the i-th pile has piles[i] bananas.  The g ...

  5. 【python游戏编程之旅】第五篇---嗷大喵爱吃鱼小游戏开发实例

    本系列博客介绍以python+pygame库进行小游戏的开发.有写的不对之处还望各位海涵. 我们一同在前几期的博客中已经学到了很多pygame的基本知识了,现在该做个小游戏实战一下了. 前几期博客链接 ...

  6. CDOJ1927 爱吃瓜的伊卡洛斯(2) 【并查集】启发式合并+set

    伊卡洛斯很爱吃西瓜.一次,他来到一个西瓜摊旁,发现水果摊有N个西瓜,西瓜有红色.黄色.绿色.蓝色……等等数不清的颜色. 伊卡洛斯很想知道知道一些信息,便于老板交谈了起来. 当老板的话的第一个字符为”A ...

  7. codevs 2277 爱吃皮蛋的小明(水题日常)

    时间限制: 1 s  空间限制: 32000 KB  题目等级 : 白银 Silver 题目描述 Description 小明特别爱吃蛋,特别是皮蛋.他一次可以吃一个蛋或者两个蛋(整个吞下去),而且他 ...

  8. 猴猴吃香蕉 背包DP

    猴猴吃香蕉 背包DP \(D\)次询问,第\(i\)次询问,每次有\(n_i\)个带权香蕉,问有多少方案使香蕉之积为\(k_i\),对结果取模\(1000000007\) \(n\le 10^3,k\ ...

  9. [LeetCode] 875. Koko Eating Bananas 可可吃香蕉

    Koko loves to eat bananas.  There are N piles of bananas, the i-th pile has piles[i] bananas.  The g ...

  10. JarvisOJ Basic 爱吃培根的出题人

    听说你也喜欢吃培根?那我们一起来欣赏一段培根的介绍吧: bacoN is one of aMerICa'S sWEethEartS. it's A dARlinG, SuCCulEnt fOoD tH ...

随机推荐

  1. Linux下aria2详细配置,以及接管浏览器下载项

    本篇是在Deepin的环境下操作,大概可适用与Ubuntu和Debian,其他系的Linux不确定, 首先,我们安装aria2,使用命令行(在桌面右键可以打开)输入sudo apt install a ...

  2. 使用std::string的结构不能使用memset

    使用了std::string作为成员变量的结构体,千万不能使用memset进行初始化,否则程序会爆

  3. D - Pair of Topics

    D - Pair of Topics 思路: 这个题需要一点思路,ai+aj>bi+bj可以转换成ai-bi+aj-bj>0,也就是c[i]=a[i]-b[i],只需要找c[i]+c[j] ...

  4. C#如何判断文件是否存在

    https://jingyan.baidu.com/article/ac6a9a5ead6ef86b653eac8b.html 首先,我们定义一个字符串,名为path. 然后,我们给他一个路径,这样才 ...

  5. 计算机科学导论-第三版-学习笔记-chapter1-绪论

    小测验的网站找不到,小程序也找不到,这两个部分的习题就不做了. Cengage Learning - Foundations of Computer Science这上面有部分答案.这里用斜体标出.我 ...

  6. 瞬间并发测试-jmeter

    测试需求:秒杀场景,瞬间并发.通常来说,JMeter的线程数即为并发的压力数,实际上JMeter在运行时,每个线程是独立的,虽然有100个线程,但这些线程并不是同时向服务器发送请求,JMeter要模拟 ...

  7. ABAP 指定字符替换为空格

    上代码 DATA:str1 TYPE string VALUE '小红##爱#six##小绿#666'. *******DATA(str1) = '小红##爱#six##小绿#666'. " ...

  8. Npoi.Mapper 日期转换

    问题:Excel文档里有一些列是日期类型的数据,使用Mapper默认的转换,发现生成的实体,在有的系统环境下能正常转换,但是在有的系统环境下,转换的日期出现中文. 猜想是Excel文档里,日期列的单元 ...

  9. java hibernate +mysql demo

    origin article:http://www.javatpoint.com/example-to-create-hibernate-application-in-eclipse-ide requ ...

  10. ALV值存放图标

    SPAN { font-family: "新宋体"; font-size: 12pt; color: rgba(0, 0, 0, 1); background: rgba(255, ...