Условие: обезьяна по имени Коко любит бананы. Есть n кол-во связок бананов, где i-ая связка содержит piles[i] бананов. Смотритель зоопарка ушел и вернется через h часов.
Коко может поедать бананы с скоростью k бананов в час. Если в связке менее k бананов, она поедает всю связку и более в этот час не ест.
Коко кушает медленно, но уверенно: обезьяна нацелена на съедение всех бананов до возвращения смотрителя.
Необходимо вычислить минимальное число k, такое что все бананы будут съедены за h часов.
Пример:
Ввод: piles = [3,6,7,11], h = 8
Вывод: 4
Ввод: piles = [30,11,23,4,20], h = 5
Вывод: 30
Решение:
/**
* @param {number[]} piles
* @param {number} speed
* @param {number} h
* @return {boolean}
*/
const canEatAll = (piles, speed, h) => {
let totalTime = 0;
for (const bananas of piles) {
totalTime += Math.ceil(bananas / speed);
if (totalTime > h) {
return false;
}
}
return true;
};
/**
* @param {number[]} piles
* @param {number} h
* @return {number}
*/
var minEatingSpeed = function (piles, h) {
let left = 1, right = Math.max(...piles);
while (left <= right) {
const mid = Math.floor(left + (right - left) / 2);
if (canEatAll(piles, mid, h)) {
right = mid - 1;
} else {
left = mid + 1;
}
}
return left;
};Пишите свое решение в комментариях👇
@javascriptv