Posted on

C++ Solution for LeetCode 2594. Minimum Time to Repair Cars



long long repairCars(vector<int>& ranks, int cars) {
    //long long min_r = *min_element(ranks.begin(), ranks.end());
    long long left = 1;
    long long right = ranks[0] * (long long)cars * cars;
    long long result = right; // Initialize with an upper bound

    auto countRepairCars = [&ranks](long long time) {
        long long repaired = 0;
        for (int r : ranks) {
            repaired += (long long)sqrt((double)time / r);
        }
        return repaired;
    };

    while (left <= right) {
        long long midpoint = left + (right - left) / 2;
        long long repaired = countRepairCars(midpoint);
        if (repaired >= cars) {
            result = midpoint; // Found a valid time, try to minimize it
            right = midpoint - 1;
        } else {
            left = midpoint + 1;
        }
    }

    return result;
}