【每日一题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 )

目录
相关文章
|
5天前
【每日一题Day366】LC2103环和杆 | 状态压缩
【每日一题Day366】LC2103环和杆 | 状态压缩
27 0
|
5天前
|
算法
【每日一题Day363】LC275H 指数Ⅱ | 二分答案
【每日一题Day363】LC275H 指数Ⅱ | 二分答案
35 0
|
5天前
【每日一题Day258】LC2532过桥的时间 | 模拟 优先队列
【每日一题Day258】LC2532过桥的时间 | 模拟 优先队列
27 0
|
5天前
【每日一题Day141】LC2379得到 K 个黑块的最少涂色次数 | 滑动窗口
【每日一题Day141】LC2379得到 K 个黑块的最少涂色次数 | 滑动窗口
20 0
|
5天前
【每日一题Day302】LC849到最近的人的最大距离 | 贪心+分类讨论
【每日一题Day302】LC849到最近的人的最大距离 | 贪心+分类讨论
28 0
|
5天前
|
存储 人工智能 算法
【每日一题Day348】LC137只出现一次的数字Ⅱ | 状态转移
【每日一题Day348】LC137只出现一次的数字Ⅱ | 状态转移
27 0
|
5天前
【每日一题Day362】LC274H 指数 | 二分答案
【每日一题Day362】LC274H 指数 | 二分答案
21 0
|
5天前
【每日一题Day224】LC2517礼盒的最大甜蜜度 | 二分答案
【每日一题Day224】LC2517礼盒的最大甜蜜度 | 二分答案
15 0
|
5天前
|
存储 算法
【每日一题Day310】LC1654到家的最少跳跃次数 | BFS
【每日一题Day310】LC1654到家的最少跳跃次数 | BFS
22 0
|
5天前
【每日一题Day330】LC337打家劫舍Ⅲ | 动态规划
【每日一题Day330】LC337打家劫舍Ⅲ | 动态规划
23 0