二分查找法:在女朋友回家之前可以玩多少个游戏?
Posted 数据结构与算法
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二分查找法:在女朋友回家之前可以玩多少个游戏?相关的知识,希望对你有一定的参考价值。
作者 | 程序员小吴
来源 | 五分钟学算法(CXYxiaowu)
题目描述
输入: piles = [3,6,7,11], H = 8
输出: 4
解释:
当 K = 4 时,玩这类游戏所需的时间为[1,2,2,3] ,1 + 2 + 2 + 3 = 8 加起来正好为 8,
而当 K = 3 时,玩这类游戏所需的时间为 [1,2,3,4] ,加起来为 10 > 8,因此最小的 K 为 4。
输入: piles = [30,11,23,4,20], H = 5
输出: 30
-
1 <= piles.length <= 10^4
-
piles.length <= H <= 10^9
-
1 <= piles[i] <= 10^9
题目描述
1
。
[ 1 , 10^9 ]
。
[ 1 , 10^9 ]
这个区间里去查找 K 的值。
(1 + M) / 2
,按照这个速度看小猿同学能否在 H 天内玩遍所有游戏。
(1 + M) / 2 - 1
这个速度通关所有游戏。如果小猿不能以
(1 + M) / 2 - 1
这个速度通关,那么很显然
(1 + M) / 2
就是需要求解的那个最小值。
(1 + M) / 2
这个范围去查找那个值。
代码实现
class Solution {
public int minEatingSpeed(int[] piles, int H) {
int low = 1;
int high = pow(10, 9);
int mid;
while (low < high) {
mid = (low + high) / 2;
if (!canPlayGame(piles, mid, H)) {
low = mid + 1;
}
else {
high = mid;
}
}
return low;
}
private boolean canPlayGame(int[] piles, int k, int H) {
int t = 0;
for (int i: piles) {
if (i % k != 0) {
t++;
}
t += i / k;
}
return t <= H;
}
}
推荐↓↓↓
长
按
关
注
以上是关于二分查找法:在女朋友回家之前可以玩多少个游戏?的主要内容,如果未能解决你的问题,请参考以下文章