力扣2594.修车的最少时间
题目解析及思路
题目要求在给定工人能力值的情况下,修好n辆车的最短时间
能力值为 r
的机械工可以在 r * n2
分钟内修好 n
辆车
-
二分答案时间
k
-
每个工人修车数量为
sqrt(k/r)
代码
class Solution {
public:
long long repairCars(vector<int>& ranks, int cars) {
ranges::sort(ranks);
auto check = [&](long long x) -> bool
{
long long res = 0;
for(auto v : ranks)
{
long long k = sqrt(x/v);
res += k;
if(res >= cars) return true;
}
return false;
};
long long l = 1,r = (long long)ranks[0]*cars*cars;
while(l < r)
{
long long mid = (l+r)/2;
if(check(mid)) r = mid;
else l = mid + 1;
}
return l;
}
};