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

目录
相关文章
|
7月前
【每日一题Day273】LC860柠檬水找零 | 贪心
【每日一题Day273】LC860柠檬水找零 | 贪心
43 0
【每日一题Day273】LC860柠檬水找零 | 贪心
|
7月前
【每日一题Day366】LC2103环和杆 | 状态压缩
【每日一题Day366】LC2103环和杆 | 状态压缩
54 0
|
7月前
|
算法
【每日一题Day363】LC275H 指数Ⅱ | 二分答案
【每日一题Day363】LC275H 指数Ⅱ | 二分答案
62 0
|
7月前
【每日一题Day312】LC2240买钢笔和铅笔的方案数 | 完全背包 数学
【每日一题Day312】LC2240买钢笔和铅笔的方案数 | 完全背包 数学
63 0
|
7月前
【每日一题Day141】LC2379得到 K 个黑块的最少涂色次数 | 滑动窗口
【每日一题Day141】LC2379得到 K 个黑块的最少涂色次数 | 滑动窗口
44 0
|
7月前
【每日一题Day258】LC2532过桥的时间 | 模拟 优先队列
【每日一题Day258】LC2532过桥的时间 | 模拟 优先队列
47 0
|
7月前
【每日一题Day356】LC2678老人的数目 | 字符串
【每日一题Day356】LC2678老人的数目 | 字符串
53 0
|
7月前
【每日一题Day167】LC1000合并石头的最低成本 | 区间dp
【每日一题Day167】LC1000合并石头的最低成本 | 区间dp
60 1
【每日一题Day167】LC1000合并石头的最低成本 | 区间dp
|
7月前
【每日一题Day362】LC274H 指数 | 二分答案
【每日一题Day362】LC274H 指数 | 二分答案
42 0
|
7月前
【每日一题Day306】LC228汇总区间 | 双指针
【每日一题Day306】LC228汇总区间 | 双指针
40 0