int minEatingSpeed(int *piles, int pilesSize, int h) {
int maxPile = 0;
for (int i = 0; i < pilesSize; i++)
if (piles[i] > maxPile)
maxPile = piles[i];
int left = 1, right = maxPile;
while (left < right) {
int k = left + (right - left) / 2;
int hours = 0;
for (int i = 0; i < pilesSize; i++)
hours += (piles[i] + k - 1) / k;
if (hours > h)
left = k + 1;
else
right = k;
}
return left;
}
#include <algorithm>
#include <vector>
using namespace std;
class Solution {
public:
int minEatingSpeed(vector<int> &piles, int h) {
int left = 1, right = *max_element(piles.begin(), piles.end());
int k = right;
while (left <= right) {
int mid = left + (right - left) / 2;
long long sum = 0;
for (int n : piles)
sum += ((long long)n + mid - 1) / mid;
if (sum > h)
left = mid + 1;
if (sum <= h) {
k = min(k, mid);
right = mid - 1;
}
}
return k;
}
};
package main
func minEatingSpeed(piles []int, h int) int {
maxPile := 0
for _, p := range piles {
if p > maxPile {
maxPile = p
}
}
left, right := 1, maxPile
for left < right {
k := left + (right-left)/2
hours := 0
for _, p := range piles {
hours += (p + k - 1) / k
}
if hours > h {
left = k + 1
} else {
right = k
}
}
return left
}
class Solution {
public int minEatingSpeed(int[] piles, int h) {
int maxPile = 0;
for (int p : piles)
maxPile = Math.max(maxPile, p);
int left = 1, right = maxPile;
while (left < right) {
int k = left + (right - left) / 2;
int hours = 0;
for (int p : piles)
hours += (p + k - 1) / k;
if (hours > h)
left = k + 1;
else
right = k;
}
return left;
}
}
class Solution {
minEatingSpeed(piles, h) {
let maxPile = Math.max(...piles);
let left = 1, right = maxPile;
while (left < right) {
const k = left + Math.floor((right - left) / 2);
let hours = 0;
for (const p of piles) hours += Math.ceil(p / k);
if (hours > h) left = k + 1;
else right = k;
}
return left;
}
}
import math
class Solution:
def minEatingSpeed(self, piles: list[int], h: int) -> int:
left, right = 1, max(piles)
while left < right:
k = left + (right - left) // 2
hours = sum(math.ceil(p / k) for p in piles)
if hours > h:
left = k + 1
else:
right = k
return left
struct Solution;
impl Solution {
fn min_eating_speed(piles: Vec<i32>, h: i32) -> i32 {
let mut left = 1;
let mut right = *piles.iter().max().unwrap();
while left < right {
let k = left + (right - left) / 2;
let hours: i32 = piles.iter().map(|&p| (p + k - 1) / k).sum();
if hours > h {
left = k + 1;
} else {
right = k;
}
}
left
}
}