2594. Minimum Time to Repair Cars
T: O(nlogm), n is the len of ranks array, m is search range
S: O(1)
class Solution {
public long repairCars(int[] ranks, int cars) {
long maxRank = 1;
for (int r : ranks) {
maxRank = Math.max(maxRank, r);
}
long left = 1;
long right = maxRank*cars*cars;
while (left <= right) {
long mid = left + (right - left)/2;
if (isAbleToRepair(mid, ranks, cars)) {
if (mid == 1 || !isAbleToRepair(mid-1, ranks, cars)) {
return mid;
}
right = mid - 1;
} else {
left = mid + 1;
}
}
return 1;
}
private boolean isAbleToRepair(long time, int[] ranks, int cars) {
int fixedCars = 0;
for (int rank : ranks) {
fixedCars += Math.sqrt(time/rank);
}
return fixedCars >= cars;
}
}
/**
t = r*n^2
sqrt(t/r) = n
so use which t -> to make n >= cars
4*10^2 = 400
search range: 1 to max time
T: O(nlogm), n is the len of ranks array, m is search range
S: O(1)
*/
Last updated
Was this helpful?