华为23年9月笔试原题,巨详细题解,附有LeetCode测试链接

文章目录
- 前言
- 思路
- 主要思路
- 关于f函数的剖析
- Code
- 就到这,铁子们下期见!!!!
前言
铁子们好啊!今天阿辉又给大家来更新新一道好题,下面链接是23年9月27的华为笔试原题,LeetCode上面的hard难题,阿辉带大伙来拿下它!!!
你可以安排的最多任务数目
思路
二分和单调队列以及一丢丢贪心
主要思路
-
先按照任务难度和工人能力排序
-
二分的范围是
[l,r)左闭右开,l = 0,r = n+1,最多完成n个任务,n取任务数与工人数的较小值,因为左闭右开,所以r取n+1,最少完成0个任务,所以l取0 -
然后就是如何判断
l与r的中点m是否是能够完成的任务数- 排序的重要就在这里体现了,我们取任务难度最小的
m个与能力最强的m个工人如果能够完成,那就能完成,如果不能就完成不了
- 排序的重要就在这里体现了,我们取任务难度最小的
主逻辑代码:
// 主函数,用于找出可以分配的最大任务数量。int maxTaskAssign(vector<int>& tasks, vector<int>& workers, int pills, int strength) {int n = min(tasks.size(), workers.size()); // 取任务数和工人数中较小的一个,因为任务数不能超过工人数。int l = 0; // 二分查找的左边界int r = n+1; // 二分查找的右边界sort(tasks.begin(), tasks.end()); // 将任务按难度排序sort(workers.begin(), workers.end()); // 将工人按能力排序// 二分查找,确定最大可分配任务数while (l < r) {int m = l + (r - l) / 2; // 中间点//f函数用于判断是否可以完成m个任务if (f(tasks, workers, pills, strength, m)) {l = m + 1; // 如果能完成m个任务,则尝试增加任务数} else {r = m; // 如果不能完成m个任务,则减少任务数}}return l - 1; // 返回最终的任务数(因为在二分查找结束时,l指向的是第一个不能完成的任务数)}
关于f函数的剖析
f函数的空间复杂度是 O ( M ) O(M) O(M),因为i和j都只前进不回退,也就是只遍历2次m长度的数组
N为任务数组与工人数组的较大值
然后主函数排序两个数组是 O ( N l o g N ) O(NlogN) O(NlogN),二分加上f函数最多也不超过 O ( N l o g N ) O(NlogN) O(NlogN)
所以时间复杂度 O ( N l o g N ) O(NlogN) O(NlogN)
空间复杂度低于 O ( N ) O(N) O(N),队列长度取决于完成任务的数量
int deque[50001]; // 一个双端队列,用于存储可能通过使用或不使用药丸完成的任务。// 辅助函数,用于判断是否能在当前条件下完成m个任务。bool f(vector<int>& ts, vector<int>& ws, int p, int s, int m) {int h = 0, t = 0; // 双端队列的头部和尾部指针//i指向最容易完成的第一个任务,j指向能力第m强的工人//遍历m个最容易完成的任务以及能力最强的m个工人for (int i = 0, j = ws.size() - m; j < ws.size(); ++j) {// 遍历每一个工人,并尝试分配任务while (i < m && ts[i] <= ws[j]) {// 如果当前任务可以由工人直接完成,则将其加入队列deque[t++] = ts[i++];}//经过上面的if如果队列里面没东西,说明该试试药了//如果队列里面有东西,可能是前一个工人嗑药留下的if (h == t || ws[j] < deque[h]) {// 如果队列为空,或当前工人无法完成队列头部的任务,则尝试使用药丸--p; // 使用一颗药丸while (i < m && ts[i] <= ws[j] + s) {// 将可以通过使用药丸完成的任务加入队列deque[t++] = ts[i++];}if (h == t || p < 0 || ws[j] + s < deque[h]) {// 如果队列依然为空,或药丸用完,或即使使用药丸也无法完成队列头部的任务,则返回falsereturn false;}--t; // 上面没返回说明嗑药有用,完成最难的任务,一点子贪心各位肯定能懂,队列尾部指针前移} else {//否则++h; // 工人直接完成了队列头部的任务,队列头部指针后移}}//能走到这就说明能完成return true;
Code
class Solution {
public:// 主函数,用于找出可以分配的最大任务数量。int maxTaskAssign(vector<int>& tasks, vector<int>& workers, int pills, int strength) {int n = min(tasks.size(), workers.size()); // 取任务数和工人数中较小的一个,因为任务数不能超过工人数。int l = 0; // 二分查找的左边界int r = n+1; // 二分查找的右边界sort(tasks.begin(), tasks.end()); // 将任务按难度排序sort(workers.begin(), workers.end()); // 将工人按能力排序// 二分查找,确定最大可分配任务数while (l < r) {int m = l + (r - l) / 2; // 中间点if (f(tasks, workers, pills, strength, m)) {l = m + 1; // 如果能完成m个任务,则尝试增加任务数} else {r = m; // 如果不能完成m个任务,则减少任务数}}return l - 1; // 返回最终的任务数(因为在二分查找结束时,l指向的是第一个不能完成的任务数)}int deque[50001]; // 一个双端队列,用于存储可能通过使用或不使用药丸完成的任务。// 辅助函数,用于判断是否能在当前条件下完成m个任务。bool f(vector<int>& ts, vector<int>& ws, int p, int s, int m) {int h = 0, t = 0; // 双端队列的头部和尾部指针for (int i = 0, j = ws.size() - m; j < ws.size(); ++j) {// 遍历每一个工人,并尝试分配任务while (i < m && ts[i] <= ws[j]) {// 如果当前任务可以由工人直接完成,则将其加入队列deque[t++] = ts[i++];}if (h == t || ws[j] < deque[h]) {// 如果队列为空,或当前工人无法完成队列头部的任务,则尝试使用药丸--p; // 使用一颗药丸while (i < m && ts[i] <= ws[j] + s) {// 将可以通过使用药丸完成的任务加入队列deque[t++] = ts[i++];}if (h == t || p < 0 || ws[j] + s < deque[h]) {// 如果队列依然为空,或药丸用完,或即使使用药丸也无法完成队列头部的任务,则返回falsereturn false;}--t; // 完成一个任务,队列尾部指针前移} else {++h; // 工人直接完成了队列头部的任务,队列头部指针后移}}return true; // 如果所有工人都成功分配了任务,则返回true}
};
就到这,铁子们下期见!!!!

相关文章:
华为23年9月笔试原题,巨详细题解,附有LeetCode测试链接
文章目录 前言思路主要思路关于f函数的剖析Code就到这,铁子们下期见!!!! 前言 铁子们好啊!今天阿辉又给大家来更新新一道好题,下面链接是23年9月27的华为笔试原题,LeetCode上面的ha…...
ES实战--性能提升
触发冲刷的条件: 1.内存缓冲区已满 2.自上次冲刷后超过了一定时间 3.事务日志达到了一定阀值 对名为get-together的Elasticsearch索引执行优化操作,将索引中的数据段(segments)合并到指定的数量1 GET /get-together/_optimize?max_num_segm…...
解决ModuleNotFoundError: No module named ‘pysqlite2‘
目录 一、问题描述: 二、问题分析: 三、问题解决: 四、参考文章: 一、问题描述: 在重新安装的anaconda环境中自建了一个新虚拟环境,再安装完jupyter后(pip install jupyter)&am…...
腾讯云4核8G服务器够用吗?能支持多少人?
腾讯云4核8G服务器支持多少人在线访问?支持25人同时访问。实际上程序效率不同支持人数在线人数不同,公网带宽也是影响4核8G服务器并发数的一大因素,假设公网带宽太小,流量直接卡在入口,4核8G配置的CPU内存也会造成计算…...
React 的调度系统 Scheduler
原文地址1 原文地址2 其中startTime是任务开始的时间,默认是-1,任务开始时将任务开始时间赋值给了startTime, 这里意思是判断这个任务执行时间是否超过5ms(写死的)。若超过,则要交出。...
微服务OAuth 2.1认证授权Demo方案(Spring Security 6)
文章目录 一、介绍二、auth微服务代码1. SecurityConfig2. UserDetailsService3. 总结 三、gateway微服务代码1. 统一处理CORS问题 四、content微服务代码1. controller2. SecurityConfig3. 解析JWT Utils4. 总结 五、一些坑 书接上文 微服务OAuth 2.1认证授权可行性方案(Sprin…...
WSL使用Centos7发行版(rootfs)
参考 导入要与 WSL 一起使用的任何 Linux 发行版 microsoftWSL2 的 2.0 更新彻底解决网络问题install daemon and client binaries on linuxInstall Compose standalone WSL配置 在HOST中,编辑用户目录下的.wslconfig文件 我需要使用docker,测试发现a…...
ClickHouse--04--数据库引擎、Log 系列表引擎、 Special 系列表引擎
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1.数据库引擎1.1 Ordinary 默认数据库引擎1.2 MySQL 数据库引擎MySQL 引擎语法字段类型的映射 2.ClickHouse 表引擎3.Log 系列表引擎几种 Log 表引擎的共性是&#…...
docker的底层原理
概述:Docker的底层原理基于容器化技术,通过使用命名空间和控制组等技术实现资源的隔离与管理。 底层原理: 客户端-服务器架构:Docker采用的是Client-Server架构,其中Docker守护进程(daemon)运…...
有关光猫、路由器、交换机、网关的理解
前提 在了解计算机网络的过程中,出现了这四个名词:光猫、路由器、交换机、网络。有点模糊,查阅互联网相关资料,进行整理。如有错误,欢迎大家批评指正。 光猫 首先光猫是物理存在的,大家在家里应该都可以…...
图像旋转翻转变换
题目描述 给定m行n列的图像各像素点灰度值,对其依次进行一系列操作后,求最终图像。 其中,可能的操作及对应字符有如下四种: A:顺时针旋转90度; B:逆时针旋转90度; C:…...
网站常见的反爬手段及反反爬思路
摘要:介绍常见的反爬手段和反反爬思路,内容详细具体,明晰解释每一步,非常适合小白和初学者学习!!! 目录 一、明确几个概念 二、常见的反爬手段及反反爬思路 1、检测user-agent 2、ip 访问频率的限制 …...
GUI—— 从的可执行exe文件中提取jar包并反编译成Java
从exe4j生成的可执行文件中提取嵌入的jar包并反编译成Java代码,可以按照以下步骤操作: 步骤1:提取jar包 1.运行exe程序:首先启动exe4j生成的.exe可执行文件。当它运行时,通常会将内部包含的jar文件解压到临时目录下。…...
阿里云服务器镜像是什么?如何选择镜像?
阿里云服务器镜像怎么选择?云服务器操作系统镜像分为Linux和Windows两大类,Linux可以选择Alibaba Cloud Linux,Windows可以选择Windows Server 2022数据中心版64位中文版,阿里云服务器网aliyunfuwuqi.com来详细说下阿里云服务器操…...
C语言------一种思路解决实际问题
1.比赛名次问题 ABCDE参加比赛,那么每个人的名次都有5种可能,即1,2,3,4,5; int main() {int a 0;int b 0;int c 0;int d 0;int e 0;for (a 1; a < 5; a){for (b 1; b < 5; b){for…...
前端判断对象为空
一.使用JSON.stringify()方法: JSON.stringify() 是将一个JavaScript对象或值转换为JSON格式字符串,如果最终只得到一个{},就说明他是一个空对象 let obj1 {}; console.log(JSON.stringify(obj1) "{}"); //true 表示为空对象l…...
DS:栈和队列的相互实现
创作不易,感谢友友们三连!! 一、前言 栈和队列的相互实现是用两个栈去实现队列或者是用两个队列去实现栈,这样其实是把问题复杂化的,实际中没有什么应用价值,但是通过他们的相互实现可以让我们更加深入地理…...
Hack The Box-Office
端口扫描&信息收集 使用nmap对靶机进行扫描 nmap -sC -sV 10.10.11.3开放了80端口,并且注意到该ip对应的域名为office.htb,将其加入到hosts文件中访问之 注意到扫描出来的还有robots文件,经过尝试后只有administrator界面是可以访问的 …...
android aidl进程间通信封装通用实现
接上一篇的分析,今天继续 aidl复杂流程封装-CSDN博客 今天的任务就是将代码梳理下放进来 1 项目gradle配置: 需要将对应的代码放到各自的目录下,这里仅贴下关键内容,细节可以下载代码慢慢看 sourceSets { main { manifest.srcFile src/main/And…...
FL Studio 21.2.3.4004 All Plugins Edition Win/Mac音乐软件
FL Studio 21.2.3.4004 All Plugins Edition 是一款功能强大的音乐制作软件,提供了丰富的音频处理工具和插件,适用于专业音乐制作人和爱好者。该软件具有直观的用户界面,支持多轨道录音、混音和编辑,以及各种音频效果和虚拟乐器。…...
Unity中型项目插件整合实战:地形、地牢、卡通渲染与性能优化
1. 这不是“又一个插件包”,而是Unity中型项目落地的现实锚点你有没有过这样的经历:刚立项一个3D RPG,美术说“地形得有真实感”,程序说“地牢生成逻辑要支持多层嵌套”,策划喊“塔防关卡得能拖拽编辑”,QA…...
Seraphine:你的英雄联盟智能助手,3大核心功能提升游戏决策力
Seraphine:你的英雄联盟智能助手,3大核心功能提升游戏决策力 【免费下载链接】Seraphine 英雄联盟战绩查询工具 项目地址: https://gitcode.com/gh_mirrors/se/Seraphine 想象一下这样的场景:你刚刚进入英雄联盟的排位赛BP阶段&#x…...
在Taotoken模型广场根据任务需求挑选合适模型的实践
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 在Taotoken模型广场根据任务需求挑选合适模型的实践 1. 模型广场:你的模型选型起点 当你开始一个新项目,或…...
SAS宏编程中IN运算符的三种实现方法与实战应用
1. 项目概述:从“硬编码”到“智能匹配”的宏编程跃迁在SAS宏编程的世界里,我们常常会遇到一个经典困境:如何优雅地处理一组离散的、但逻辑上同属一个类别的值?比如,你需要根据用户传入的省份名称,执行不同…...
各种“地”—— 各种“GND”
GND,指的是电线接地端的简写。代表地线或0线。电路图上和电路板上的GND(Ground)代表地线或0线.GND就是公共端的意思,也可以说是地,但这个地并不是真正意义上的地。是出于应用而假设的一个地,对于电源来说,它就是一个电…...
MySQL 5.7.12 + Druid 连接池“只读事务”异常深度剖析(Cannot execute statement in a READ ONLY transaction)
一、故障现象 在 MySQL 5.7.12 环境下,使用 Druid 连接池的应用偶尔会抛出以下异常: Cannot execute statement in a READ ONLY transaction诡异特征: 偶发性出现,并非每次操作都复现conn.isReadOnly() 返回 false,但 …...
从RTL代码到SDC约束:手把手教你为PLL/DCM生成的时钟写对时序约束
从RTL代码到SDC约束:手把手教你为PLL/DCM生成的时钟写对时序约束 在数字芯片设计流程中,时钟约束的正确性直接影响着时序收敛的效率和质量。很多工程师能够熟练编写RTL代码,却在转换为SDC约束时遇到困惑——特别是当设计中使用PLL、DCM或自定…...
AI动态认知地图:从Llama 4传闻到MCIP验证的闭环实践
1. 这不是一份普通 newsletter:它是一张AI领域的动态认知地图“This AI newsletter is all you need #91”——光看标题,你可能以为这只是又一份堆砌链接的AI资讯合集。但作为连续追踪该系列超过两年、亲手拆解过前87期原始内容、并用其指导过6个真实AI产…...
掌握AI写教材方法,低查重工具让教材编写变得如此简单!
许多教材编写者常感到失落,因为经过反复琢磨的教材内容,在缺乏相应的辅助资源时,教学效果往往大打折扣。课后练习的题型设计需要有层次感,但往往缺乏创新灵感;想要制作出直观的教学课件,却没有技术来实现&a…...
使用 Python 和 Taotoken 官方风格 SDK 实现你的第一个 AI 对话应用
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 使用 Python 和 Taotoken 官方风格 SDK 实现你的第一个 AI 对话应用 对于刚开始接触大模型应用开发的 Python 程序员来说ÿ…...
