
能否在n躺内完成至少totalTrips趟:
js
let trips = 0
for (const x of time) {
trips += Math.floor(n / x)
if (trips >= totalTrips) return true
}
return falsejs
/**
* @param {number[]} time
* @param {number} totalTrips
* @return {number}
*/
const check = (n, time, totalTrips) => {
// for 循环好一点
let trips = 0
for (const x of time) {
trips += Math.floor(n / x)
if (trips >= totalTrips) return true
}
return false
// return time.reduce((acc, cur) => acc + Math.floor(n / cur), 0) >= totalTrips
}
var minimumTime = function (time, totalTrips) {
const max = Math.max(...time)
const minT = Math.min(...time)
// let right = max * Math.ceil(totalTrips / time.length);
let right = minT * totalTrips // 循环不变量:check(right) 恒为 true
let left = Math.min(...time) - 1 // 最小 - 1 永远为false
while (left < right) {
const mid = Math.floor((left + right) / 2)
if (check(mid, time, totalTrips)) {
right = mid
} else {
left = mid + 1
}
}
return right
}