【每日一题Day319】LC2594修车的最少时间 | 二分答案

简介: 【每日一题Day319】LC2594修车的最少时间 | 二分答案

修车的最少时间【LC2594】

给你一个整数数组 ranks ,表示一些机械工的 能力值 。ranksi 是第 i 位机械工的能力值。能力值为 r 的机械工可以在 r * n2 分钟内修好 n 辆车。

同时给你一个整数 cars ,表示总共需要修理的汽车数目。

请你返回修理所有汽车 最少 需要多少时间。

**注意:**所有机械工可以同时修理汽车。

image.png

class Solution {
    public long repairCars(int[] ranks, int cars) {
        long l = 1L;
        long r = 1L * ranks[0] * cars * cars;      
        while (l <= r){
            long mid = l + (r - l) / 2;
            if (check(ranks, mid, cars)){
                r = mid - 1;
            }else{
                l = mid + 1;
            }
        }
        return l;
    }
    public boolean check(int[] ranks,long time, int target){
        int total = 0;
        for (int rank : ranks){
            total += (int)Math.sqrt(time / rank);
            if (total >= target){
                return true;
            }
        }
        return false;
    }
}

复杂度

时间复杂度:O ( n l o g m ),n是数组的长度,m是二分查找的上界。二分查找的时间复杂度是O (logm) ,每次判断需要的时间复杂度为O ( n )

空间复杂度:O ( 1 )

目录
相关文章
|
2月前
【每日一题Day366】LC2103环和杆 | 状态压缩
【每日一题Day366】LC2103环和杆 | 状态压缩
32 0
|
2月前
|
算法
【每日一题Day363】LC275H 指数Ⅱ | 二分答案
【每日一题Day363】LC275H 指数Ⅱ | 二分答案
40 0
|
2月前
【每日一题Day141】LC2379得到 K 个黑块的最少涂色次数 | 滑动窗口
【每日一题Day141】LC2379得到 K 个黑块的最少涂色次数 | 滑动窗口
27 0
|
2月前
【每日一题Day258】LC2532过桥的时间 | 模拟 优先队列
【每日一题Day258】LC2532过桥的时间 | 模拟 优先队列
30 0
|
2月前
【每日一题Day302】LC849到最近的人的最大距离 | 贪心+分类讨论
【每日一题Day302】LC849到最近的人的最大距离 | 贪心+分类讨论
34 0
|
2月前
【每日一题Day356】LC2678老人的数目 | 字符串
【每日一题Day356】LC2678老人的数目 | 字符串
28 0
|
2月前
【每日一题Day362】LC274H 指数 | 二分答案
【每日一题Day362】LC274H 指数 | 二分答案
24 0
|
2月前
【每日一题Day306】LC228汇总区间 | 双指针
【每日一题Day306】LC228汇总区间 | 双指针
25 0
|
2月前
|
存储 算法
【每日一题Day310】LC1654到家的最少跳跃次数 | BFS
【每日一题Day310】LC1654到家的最少跳跃次数 | BFS
25 0
|
2月前
【每日一题Day330】LC337打家劫舍Ⅲ | 动态规划
【每日一题Day330】LC337打家劫舍Ⅲ | 动态规划
25 0