珂珂喜欢吃香蕉。这里有 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. MySQL下载,安装,配置环境变量【0基础小白用】

    一,下载 选择社区版的,下载地址:https://dev.mysql.com/downloads/installer/  ,选择离线安装包 二,安装 1,双击安装包文件,这里选择服务模式,会安装在默认 ...

  2. Nginx教程由浅入深

    Nginx   一.安装Nginx 1.准备工作 (1)打开虚拟机,使用远程连接工具连接 linux 操作系统 (2)到 nginx 官网下载软件 http://nginx.org/ 2.开始进行 n ...

  3. 从零搭建hadoop集群之zookeeper集群安装

    1. 从官方渠道获取对应的zookeeper的安装包 http://archive.apache.org/dist/zookeeper/ zookeeper-3.4.10.tar.g 2. 上传zoo ...

  4. 将freeswitch加入CentOS7的systemctl

    cd /usr/local/src/freeswitch/build cp freeswitch.service /usr/lib/systemd/system/ cp freeswitch.sysc ...

  5. notepad++ 编写html代码快捷键切换到浏览器查看

    1.右键chrome属性,查看目标C:\Users\duanx\AppData\Local\Google\Chrome\Application\chrome.exe 2.然后notepad运行,输入如 ...

  6. 当前工程中typescritpt依赖包与依赖包中依赖包类型不一致如何解决

    在开发中,遇到文件中引入webpack,但是webpack.ICompiler不一致的情况 //import webpack from 'webpack'; import webpackHot fro ...

  7. google filament pbr

    https://google.github.io/filament/Filament.md.html

  8. 把VScode插件提示abc的提示给移到最后

    把VScode插件提示abc的提示给移到最后 解决方法 打开设置,在搜索中输入editor.snippetSuggestions,然后将选项改为top,就可以解决了 top:就是将你插件提示放到最上面 ...

  9. PO 锁

    SAP NetWeaver Administrator->可用性和监控->资源监控->锁

  10. yii框架中 不能正确正常使用phpredis 路径安装好后还是报 Class yii\redis\Connection does not exist!

    1,成功解决方案 在yiisoft / extensions.php 中添加如下数组 指向目录 'yiisoft/yii2-redis' =>array(      'name'=>'yi ...