-
lang
kotlin -
tags
ArrayBinary Search
class Solution {
fun minimumTime(time: IntArray, totalTrips: Int): Long {
var left = 0L
var right = Long.MAX_VALUE
// binary search to find best valid tripTime
while (left <= right) {
val mid: Long = left + (right - left) / 2
if (isTimeValid(time, totalTrips, mid)) right = mid - 1
else left = mid + 1
}
return left
}
fun isTimeValid(time: IntArray, totalTrips: Int, tripTime: Long): Boolean {
var sum = 0L
for (i in time) {
// add all possible trip-handling-time for each bus
sum += (tripTime / i)
// if possibly handling in given tripTime, return true
if (sum >= totalTrips) return true
}
return false
}
}