2594. 修车的最少时间

news2024/11/28 20:55:14

文章目录

  • Tag
  • 题目来源
  • 题目解读
  • 解题思路
    • 方法一:二分枚举答案
  • 写在最后

Tag

【二分枚举答案】【数组】


题目来源

2594. 修车的最少时间


题目解读

给你一个表示机械工能力的数组 ranksranks[i] 表示第 i 位机械工可以在 r a n k s [ i ] ∗ n 2 ranks[i] * n ^2 ranks[i]n2 分钟内修好 n 辆车。所有的机械工可以同时修理汽车,返回修理完所有汽车需要的最少时间。


解题思路

方法一:二分枚举答案

如果已知修车的时间为 t t t,那么我们可以计算每个人在 t 分钟内可以修好的车辆数。如果一个工人的修车能力为 r,则有这样的表达式:

r n 2 < = t rn^2 <= t rn2<=t
解得:

n < = t r n <= \sqrt{\frac{t}{r}} n<=rt
于是,能力值为 r 的工人最多可以修车 ⌊ t r ⌋ \lfloor{\frac{t}{r}}\rfloor rt 辆。

累加每个机械工在 t 分钟内的修车数量,如果有

∑ i = 0 n − 1 ⌊ t r a n k s [ i ] ⌋ > = c a r s \sum_{i=0}^{n-1}{\lfloor \sqrt{\frac{t}{ranks\left[ i \right]}} \rfloor}>=cars i=0n1ranks[i]t >=cars

则说明可以在 t 分钟内修完所有的车。

上式表明,t 越大,能修好的车子越多。有了这样的单调性,我们就可以二分枚举答案了,二分的上界为修车最快的人修完所有车子的时间即 m i n ( r a n k s ) ⋅ c a r s 2 min(ranks) \cdot cars^2 min(ranks)cars2

在具体实现中,我们枚举修车的时间 t,如果所有机械工在 t 分钟内修完的汽车数量大于等于 cars,则调整右边界为 t,否则调整左边界为 t+1

实现代码

class Solution {
public:
    long long repairCars(vector<int>& ranks, int cars) {
        int minR = *min_element(ranks.begin(), ranks.end());
        long long left = 0, right = 1LL * minR * cars * cars;
        auto check = [&](long long m) {
            long long cnt = 0;
            for (int r : ranks) {
                cnt += sqrt(m / r);
            }
            return cnt >= cars;
        };
        while (left < right) {
            long long mid = left + ((right - left) >> 1);
            if (check(mid)) {
                right = mid;
            }
            else {
                left = mid + 1;
            }
        }
        return left;
    }
};

复杂度分析

时间复杂度: O ( n l o g L ) O(nlogL) O(nlogL) n n n 为数组 ranks 的长度, L L L 为二分的上界。

空间复杂度: O ( 1 ) O(1) O(1),因为仅用了常数个变量。


写在最后

如果文章内容有任何错误或者您对文章有任何疑问,欢迎私信博主或者在评论区指出 💬💬💬。

如果大家有更优的时间、空间复杂度方法,欢迎评论区交流。

最后,感谢您的阅读,如果感到有所收获的话可以给博主点一个 👍 哦。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/987330.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【三维】NeRF神经辐射场构建三维模型

论文地址&#xff1a;paper 代码地址&#xff1a;code 视频地址&#xff1a;油管 目录 0.&#x1f308;&#x1f308;摘要 1.&#x1f308;&#x1f308;nerf主要原理 2.&#x1f308;&#x1f308;网络结构 2.1&#x1f4cc;渲染 2.2&#x1f4cc;消融实验 3.&#x…

链表反转问题

链表反转常用的两种方式 1.建立虚拟头结点辅助反转 Java 实现 public static ListNode reverseListByDummyNotCreate(ListNode head) {ListNode ans new ListNode(-1);ListNode cur head;while (cur ! null) {ListNode next cur.next;cur.next ans.next;ans.next cur;cur…

抖音集团都在用的画质评估工具,确定不试试吗?

导读 本文从抖音集团内部画质评估体系的建设历程着笔&#xff0c;主要分享了画质评测对于业务的重要性、主要应用场景和内部产品的一些典型实践案例。通过分享业务视角遇到的一些问题和我们的解决思路&#xff0c;希望能抛砖引玉&#xff0c;为遇到类似困扰的伙伴们提供有价值的…

[C++学习] 多进程通信共享内存

ref:https://blog.csdn.net/qq_35733751/article/details/82872197 多线程共享进程的地址空间&#xff0c;如果多个线程需要访问同一块内存&#xff0c;用全局变量即可。 在多进程中&#xff0c;每个进程的地址空间是独立的&#xff0c;不共享的&#xff0c;如果多个进程需要访…

Redis持久化、主从与哨兵架构详解

Redis持久化 RDB快照&#xff08;snapshot&#xff09; 在默认情况下&#xff0c; Redis 将内存数据库快照保存在名字为 dump.rdb 的二进制文件中。 你可以对 Redis 进行设置&#xff0c; 让它在“ N 秒内数据集至少有 M 个改动”这一条件被满足时&#xff0c; 自动保存一次数…

yolov7添加pconv模块

连接pconv 1、复制到models-common.py文件最后 2、添加模块到yolo.py 3、修改网络&#xff0c;建议替换3x3的卷积&#xff0c;后面的参数不要了 4、不能替换步长为2的卷积

CSS笔记(黑马程序员pink老师前端)浮动,清除浮动

浮动可以改变标签的默认排列方式。浮动元素常与标准流的父元素搭配使用. 网页布局第一准则:多个块级元素纵向排列找标准流&#xff0c;多个块级元素横向排列找浮动。 float属性用于创建浮动框&#xff0c;将其移动到一边&#xff0c;直到左边缘或右边缘触及包含块或另一个浮动框…

【算法系列篇】分治-快排

文章目录 前言什么是分冶1.颜色分类1.1 题目要求1.2 做题思路1.3 Java代码实现 2. 排序数组2.1 题目要求2.2 做题思路2.3 Java代码实现 3.数组中的第k个最大元素3.1 题目要求3.2 做题思路3.3 Java代码实现 4. 最小的k个数4.1 题目要求4.2 做题思路4.3 Java代码实现 总结 前言 …

前端面试题合集(一)

前端面试题合集 1.js异步方案2.文件上传如何限制文件类型3. 说出 与的区别4.多维数组如何降维5.如何给一个按钮绑定两个onclick事件 1.js异步方案 js异步方法分为两种&#xff0c;分别为defer和async,如果没有写其中一种的话代码从上到下同步执行&#xff0c;遇到脚本代码之后…

埋头干活不会汇报,别说 996 就算 007 也没用!

​ 见字如面&#xff0c;我是军哥&#xff01; 经调研发现 80% 的程序员认为工作汇报就是形式主义&#xff0c;无聊至极&#xff0c;但是我要和你说&#xff0c;做好工作汇报非常重要&#xff0c;这直接关系到你在这家公司能否快速成长和晋升加薪&#xff0c;而且要告诉你一件扎…

vue3:18、Pinia持久化(pinia-plugin-persistedstate)

安装插件 npm i pinia-plugin-persistedstate main.js中引入 import { createApp } from vue import { createPinia } from pinia import App from ./App.vue import piniaPluginPersistedstate from pinia-plugin-persistedstate // createApp(App).use(CreatePinia()).mou…

Day58|leetcode 739. 每日温度、496.下一个更大元素 I

今天开始单调栈&#xff01; leetcode 739. 每日温度 题目链接&#xff1a;739. 每日温度 - 力扣&#xff08;LeetCode&#xff09; 视频链接&#xff1a;单调栈&#xff0c;你该了解的&#xff0c;这里都讲了&#xff01;LeetCode:739.每日温度_哔哩哔哩_bilibili 题目概述 …

Unity——脚本与导航系统

Unity内置了一个比较完善的导航系统&#xff0c;一般称为Nav Mesh&#xff08;导航网格&#xff09;&#xff0c;用它可以满足大多数游戏中角色自动导航的需求。 一、导航系统相关组件 Unity的导航系统由以下几个部分组成&#xff1a; Nav Mesh。Nav Mesh与具体的场景关联&…

【postgresql 基础入门】数据库服务的管理,启动、停止、状态查看、配置加载、重启都在这里

数据库服务管理 ​专栏内容&#xff1a; postgresql内核源码分析手写数据库toadb并发编程 ​开源贡献&#xff1a; toadb开源库 个人主页&#xff1a;我的主页 管理社区&#xff1a;开源数据库 座右铭&#xff1a;天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff…

【精读Uboot】反汇编分析SPL的_main函数

1、简介 典型的Uboot启动分为两个阶段&#xff0c;bootrom->SPL&#xff08;Secondary Program Loader&#xff09;->ATF->OPTEE(可选)->Uboot。其中SPL为BL2&#xff0c;ATF为BL31&#xff0c;OPTEE为BL32&#xff0c;Uboot为BL33。其中bootrom是固化在芯片内部的…

MySQL 8.0.34(x64)安装笔记

一、背景 从MySQL 5.6到5.7&#xff0c;再到8.0&#xff0c;版本的跳跃不可谓不大。安装、配置的差别也不可谓不大&#xff0c;特此备忘。 二、过程 &#xff08;1&#xff09;获取MySQL 8.0社区版&#xff08;MySQL Community Server&#xff09;   从 官网 字样 “MySQL …

3D印刷电路板在线渲染查看工具

从概念上讲&#xff0c;这是有道理的&#xff0c;因为PCB印制电路板上的走线从一个连接到下一个连接的路线基本上是平面的。 然而&#xff0c;我们生活在一个 3 维世界中&#xff0c;能够以这种方式可视化电路以及相应的组件&#xff0c;对于设计过程很有帮助。本文将介绍KiCad…

VsCode Ctrl+.修复无效

vscode 快速修复(quick fix) 快捷键(Ctrl .)被占用问题解决方法_vscode快速修复快捷键_追求者2016的博客-CSDN博客

Android 系统源码目录frameworks/base/packages和packages/apps下的APP区别

概要 在 Android Open Source Project (AOSP) 源代码中&#xff0c;frameworks/base/packages 和 packages/apps 目录都包含 Android 系统中的应用程序&#xff0c;但它们在性质和用途上有一些区别&#xff1a; 1&#xff0c;frameworks/base/packages frameworks/base 目录…

OMRON G9SP和NB触摸屏使用232口通讯

G9SP和NB触摸屏使用232口通讯 实验时间&#xff1a;2023/9/7 实验设备&#xff1a;G9SP-N20S、CP1W-CIF01&#xff08;232串口选减板&#xff09;、NB5Q-TW00B、XW2Z-200T&#xff08;串口线&#xff09;&#xff0c;CP1W-20EDT1&#xff0c;D4GS-N4T&#xff08;安全门开关&a…