From 13afe04e8345d2fb7876c86f123561fb3ddb4b90 Mon Sep 17 00:00:00 2001
From: cchroot <843328872@qq.com>
Date: Wed, 11 Nov 2020 21:21:20 +0800
Subject: [PATCH] =?UTF-8?q?=E3=80=90875.=20=E7=88=B1=E5=90=83=E9=A6=99?=
=?UTF-8?q?=E8=95=89=E7=9A=84=E7=8F=82=E7=8F=82=E3=80=91=E3=80=90C++?=
=?UTF-8?q?=E3=80=91?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
提供 C++ 解法
---
高频面试系列/koko偷香蕉.md | 35 ++++++++++++++++++++++++++++-
1 file changed, 34 insertions(+), 1 deletion(-)
diff --git a/高频面试系列/koko偷香蕉.md b/高频面试系列/koko偷香蕉.md
index cc880dd..c44f083 100644
--- a/高频面试系列/koko偷香蕉.md
+++ b/高频面试系列/koko偷香蕉.md
@@ -169,4 +169,37 @@ for (int i = 0; i < n; i++)
-======其他语言代码======
\ No newline at end of file
+======其他语言代码======
+
+[cchroot](https://github.com/cchroot) 提供 C++ 代码:
+
+```c++
+class Solution {
+public:
+ int minEatingSpeed(vector& piles, int H) {
+ // 二分法查找最小速度
+ // 初始化最小速度为 1,最大速度为题目设定的最大值 10^9
+ // 这里也可以遍历 piles 数组,获取数组中的最大值,设置 right 为数组中的最大值即可(因为每堆香蕉1小时吃完是最快的)
+ // log2(10^9) 约等于30,次数不多,所以这里暂时就不采取遍历获取最大值了
+ int left = 1, right = pow(10, 9);
+ while (left < right) { // 二分法基本的防止溢出
+ int mid = left + (right - left) / 2;
+ // 以 mid 的速度吃香蕉,是否能在 H 小时内吃完香蕉
+ if (!canFinish(piles, mid, H))
+ left = mid + 1;
+ else
+ right = mid;
+ }
+ return left;
+ }
+
+ // 以 speed 的速度是否能把香蕉吃完
+ bool canFinish(vector& piles, int speed, int H) {
+ int time = 0;
+ // 遍历累加时间 time
+ for (int p: piles)
+ time += (p - 1) / speed + 1;
+ return time <= H; // time 小于等于 H 说明能在 H 小时吃完返回 true, 否则返回 false
+ }
+};
+```