mirror of
https://github.com/prdlk/leetcode.git
synced 2026-11-02 13:12:44 +00:00
84 lines
1.7 KiB
Plaintext
84 lines
1.7 KiB
Plaintext
---
|
|
title: '875. Koko Eating Bananas'
|
|
description: Koko loves to eat bananas. There are n piles of bananas, the i^th pile has piles[i] bananas. The guards have gone and will come back in h hours
|
|
icon: dot
|
|
sidebar:
|
|
label: 'Koko Eating Bananas'
|
|
badge: 'Medium'
|
|
---
|
|
|
|
<Badge variant="accent">Array</Badge>
|
|
|
|
### Example 1:
|
|
- Input: `piles = [3,6,7,11], h = 8`
|
|
- Output: `4`
|
|
|
|
### Example 2:
|
|
- Input: `piles = [30,11,23,4,20], h = 5`
|
|
- Output: `30`
|
|
|
|
### Example 3:
|
|
- Input: `piles = [30,11,23,4,20], h = 6`
|
|
- Output: `23`
|
|
|
|
### Constraints:
|
|
|
|
- `1 <= piles.length <= 10^4`
|
|
- `piles.length <= h <= 10^9`
|
|
- `1 <= piles[i] <= 10^9`
|
|
|
|
## Approach
|
|
|
|
```mermaid
|
|
flowchart TD
|
|
S(["minEatingSpeed(piles, h)"]) --> I["l = 1, r = max(piles)"]
|
|
I --> W{"l < r?"}
|
|
W -- no --> E(["return l — the smallest workable speed"])
|
|
W -- yes --> M["mid = floor((l + r) / 2)"]
|
|
M --> K["kWorks(mid): hours = sum of ceil(p / mid)"]
|
|
K --> Q{"hours <= h?"}
|
|
Q -- yes --> A["r = mid — keep mid, try slower"]
|
|
Q -- no --> B["l = mid + 1 — too slow, speed up"]
|
|
A --> W
|
|
B --> W
|
|
```
|
|
|
|
## Solution
|
|
|
|
```js
|
|
/**
|
|
* @param {number[]} piles
|
|
* @param {number} h
|
|
* @return {number}
|
|
*/
|
|
var minEatingSpeed = function(piles, h) {
|
|
// Function to determine if K works for the H
|
|
function kWorks(k){
|
|
let hours = 0;
|
|
for (let p of piles){
|
|
hours += Math.ceil(p/k)
|
|
}
|
|
return hours <= h;
|
|
}
|
|
|
|
// Setup Binary Search
|
|
let l = 1;
|
|
let r = Math.max(...piles);
|
|
|
|
// Find the K value which works for H and consumes all bananas
|
|
while (l < r){
|
|
const mid = Math.floor((l + r) / 2);
|
|
if (kWorks(mid)){
|
|
r = mid;
|
|
}else{
|
|
l = mid + 1;
|
|
}
|
|
}
|
|
return l;
|
|
};
|
|
```
|
|
|
|
## Explanation
|
|
|
|
<YouTube id="U2SozAs9RzA" title="Koko Eating Bananas - Binary Search - Leetcode 875 - Python" />
|