Medium
You are given an array time
where time[i]
denotes the time taken by the ith
bus to complete one trip.
Each bus can make multiple trips successively; that is, the next trip can start immediately after completing the current trip. Also, each bus operates independently; that is, the trips of one bus do not influence the trips of any other bus.
You are also given an integer totalTrips
, which denotes the number of trips all buses should make in total. Return the minimum time required for all buses to complete at least totalTrips
trips.
Example 1:
Input: time = [1,2,3], totalTrips = 5
Output: 3
Explanation:
The total number of trips completed is 1 + 0 + 0 = 1.
The total number of trips completed is 2 + 1 + 0 = 3.
The total number of trips completed is 3 + 1 + 1 = 5.
So the minimum time needed for all buses to complete at least 5 trips is 3.
Example 2:
Input: time = [2], totalTrips = 1
Output: 2
Explanation:
There is only one bus, and it will complete its first trip at t = 2.
So the minimum time needed to complete 1 trip is 2.
Constraints:
1 <= time.length <= 105
1 <= time[i], totalTrips <= 107
class Solution {
fun minimumTime(time: IntArray, totalTrips: Int): Long {
return bs(0, Long.MAX_VALUE, time, totalTrips.toLong())
}
private fun bs(left: Long, right: Long, time: IntArray, totalTrips: Long): Long {
if (left > right) {
return Long.MAX_VALUE
}
val mid = left + right shr 1
return if (isPossible(time, mid, totalTrips)) {
Math.min(
mid,
bs(left, mid - 1, time, totalTrips),
)
} else {
bs(mid + 1, right, time, totalTrips)
}
}
private fun isPossible(time: IntArray, mid: Long, totalTrips: Long): Boolean {
var count: Long = 0
for (i in time) {
count += mid / i
if (count >= totalTrips) {
return true
}
}
return false
}
}