
华为机试真题精讲(从题目到思路以及代码实现)持续更新ing
文章平均质量分 70
华为机试真题精讲,包括题目和解题思路以及多语言代码实现。助你的大厂梦更近一步
优惠券已抵扣
余额抵扣
还需支付
¥39.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
林聪木
巧笑倩兮,美目盼兮,素以为绚兮
展开
-
华为OD-华为机试精讲500篇系列文章目录介绍(持续补充ing)
华为OD?华为OD是一种新的用工方式,其全称为Outsourcing Dispatch(外包派遣)。这种方式是由华为与外部的人力资源服务公司如外企德科或科锐国际合作进行招聘。OD模式下,员工的劳动合同并非直接与华为签订,而是在这些第三方人力资源服务公司的名义下。这意味着OD员工的工作归属感可能不如传统华为员工强烈,但他们在薪酬待遇上通常会有所保障。华为OD主要面向的是13级至17级的软件开发类岗位,包括但不限于前端开发、后端开发、软件测试、算法、大数据等领域。原创 2024-01-29 08:09:38 · 1841 阅读 · 0 评论 -
华为OD机试真题实战应用【赛题代码篇】-反转单链表(附Java、C++和python代码实现)
开始将 curr 指向 头节点并从头节点开始进行遍历,next 指向当前节点的下一个节点,然后让当前节点的 next 指向前一个节点,也就是 pre。再往后移动 pre 和 curr,使 pre 指向当前节点 curr ,当前节点 curr 后移指向 next。遍历的时候,如要把2指向1,这时候2与3就会断开,所以先用after存放cur.next,然后把cur的指针指向pre。最后pre指向3,cur指向空。双链表求解是把原链表的结点一个个摘掉,每次摘掉的链表都让他成为新的链表的头结点,然后更新新链表。原创 2024-03-21 00:30:00 · 88 阅读 · 0 评论 -
华为OD机试真题实战应用【赛题代码篇】-删除链表中等于给定值 val 的所有节点(附Java、C++和python代码实现)
如果cur->val = val ,则让前驱指针(prev)的指针域指向当前指针(cur)的指针域,然后释放掉cur指针所指向的空间,cur指针指向前驱指针的指针域;细节处理: 特别处理第一个结点就是要删除的结点,如果不处理,此时的前驱指针为空,进行prev->next操作的时候就会出现空指针异常。= val ,将cur赋值给prev,cur指向cur->next。创建cur指针指向头结点,创建prev指针作为cur指针的前驱指针;让cur指针指向头结点的指针域,然后释放掉cur指针所指向的空间;原创 2024-03-19 00:30:00 · 194 阅读 · 0 评论 -
华为OD机试真题实战应用【赛题代码篇】-整数与IP地址间的转换(附Java、C++和python代码实现)
组合起来即为:00001010 00000000 00000011 11000001,转换为10进制数就是:167773121,即该IP地址转换后的数字就是它了。原理:ip地址的每段可以看成是一个0-255的整数,把每段拆分成一个二进制形式组合起来,然后把这个二进制数转变成。本题含有多组输入用例,每组用例需要你将一个ip地址转换为整数、将一个整数转换为ip地址。举例:一个ip地址为10.0.3.193。1 输出转换成10进制的IP地址。2 输入10进制型的IP地址。2 输出转换后的IP地址。原创 2024-03-22 00:30:00 · 96 阅读 · 0 评论 -
华为OD机试真题实战应用【赛题代码篇】-单词倒排(附Java、C++和python代码实现)
首先,定义一个临时字符串,遍历输入的字符串,将字母字符放入临时字符串temp,当遇到非字母字符时,temp放入容器中存储,并清空临时字符串,此时已经拿到一个单词,继续获取下一个单词;考虑到最后的非结尾符字符可能是字母,当遍历完后,将非空临时字符串存储的最后一个单词也要放入容器中;倒序输出容器中的string单词,完成。3、要求倒排后的单词间隔符以一个空格表示;如果原字符串中相邻单词间有多个间隔符时,倒排转换后也只允许出现一个空格间隔符;2、非构成单词的字符均视为单词间隔符;输入一行以空格来分隔的句子。原创 2024-03-23 00:30:00 · 86 阅读 · 0 评论 -
华为OD机试真题实战应用【赛题代码篇】-字符串合并处理(附Java、C++和python代码实现)
首先,将输入的两个字符串相加,再分别取出其奇数部分和偶数部分放置在vector中,用sort函数各自实现排序再相插合体,得到新的字符串ns;遍历ns,当字符属于数字或者字母,则按照字符串num对照,确定该字符的16进制数值,再用bitset转化为bit类型,即只有1和0的数据集,用reverse翻转函数处理后得到反转字符串,通过bitToHex函数计算该bit数据的16进制数值,再转化为字符类型,输出即可。(1)合并两个字符串,并根据index的位置,进行奇偶拆分。(3)将排好序的字符串进行拼接。原创 2024-03-24 00:30:00 · 103 阅读 · 0 评论 -
华为OD机试真题实战应用【赛题代码篇】-素数伴侣(附Java、C++和python代码实现)
素数伴侣 是指两个正整数的和为素数,这两个正整数就被称为“素数伴侣”。例如,数字2和5、6和13都是素数伴侣。给定N(偶数)个正整数,我们需要从中挑选出若干对,组成“素数伴侣”。例如,有4个正整数:2, 5, 6, 13,如果将5和6分为一组,只能得到一组“素数伴侣”,而将2和5、6和13编组,将得到两组“素数伴侣”。能组成“素数伴侣”最多的方案称为“最佳方案”。12在编程实现中,我们可以使用匈牙利算法来解决这个问题。匈牙利算法是一种应用在图论中的算法,用于求解二分图的最大匹配问题。原创 2024-03-19 00:30:00 · 634 阅读 · 0 评论 -
华为OD机试真题实战应用【赛题代码篇】-查询兄弟单词(附Java、C++和python代码实现)
描述: 定义一个兄弟单词为:交换该单词字母顺序(可以交换任意次),而不添加、删除、修改原有的字母就能生成的单词,兄弟单词要求和原来的单词不同,例如ab和ba是兄弟单词,ab和ab就不是;在输入中3 abc bca cab abc 1,abc为要查找该单词兄弟单词的个数,1为兄弟单词的序号,指查找第1个兄弟单词。输入描述: 输入只有一行,先输入字典中单词的个数n,再输入n个单词作为字典单词,然后输入一个单词x,最后输入整数k。输入描述: 先输入字典中单词的个数n,再输入n个单词作为字典单词。原创 2024-03-18 00:30:00 · 226 阅读 · 0 评论 -
华为OD机试真题实战应用【赛题代码篇】-数据分类处理(附Java、C++和python代码实现)
对R序列需要进行去重和排序,如示例,结果就是0 3 6,然后从I序列中找包含0的数字,把这个数字所在的位置和数字先后放入vector中,然后将符合要求的数字个数放在这个vector前面第二个位置,将0放在第一个位置,这样就组成了一个vector;这个题目读起来费劲,其实并不难,题目意思就是先输入一个数值,表示接下来要输入多少个数,这些数组成I序列,再输入一个数,表示接下来要输入多少个数,这些数组成R序列。一组输入整数序列I和一组规则整数序列R,I和R序列的第一个整数为序列的个数(个数不包含第一个整数);原创 2024-03-13 00:30:00 · 296 阅读 · 0 评论 -
华为机试真题实战应用【算法代码篇】-检测字符串是否为回文(附python、C++和JAVA代码实现)
也就是说,我们每次将指针移到下一个字母字符或数字字符,再判断这两个指针指向的字符是否相同。b 判断这两个元素是否相等,不等则返回false,相等则left++,right--,分别指向下一对要比较的元素。的两侧,随后我们不断地将这两个指针相向移动,每次移动一步,并判断这两个指针指向的字符是否相同。若right指向的元素是非法字符 则right--,跳过这个非法字符,指向右半部分下一个要判断的字符。若left指向的元素是非法字符,则left++,跳过这个非法字符,指向左半部分下一个要判断的字符。原创 2024-03-14 00:30:00 · 158 阅读 · 0 评论 -
华为机试真题实战应用【算法代码篇】-字符串最后一个单词的长度(附Python、C++和Java代码)
注:strlen所作的是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符'\0'为止,然后返回计数器值(长度不包含'\0')。再比如, “hello" 这个字符串没有空格,那么找了之后,返回值是 -1,字符串总长度是 5,那么最后一个单词就是其本身,所以 5 - 1 - (-1) = 5。那么计算时,找出最后一次空格出现的位置,使用总的字符串长度减去它,问题来了,在计算索引时,是从0开始的,因此还要再减去1。原创 2024-03-15 00:30:00 · 65 阅读 · 0 评论 -
华为机试真题实战应用【算法代码篇】-字符串中的第一个唯一字符(附Python、C++和Java代码)
访问字符串s中元素,在chaDic中查询该元素对应的次数,如果次数为1就输出该元素在字符串s中对应的下标。str.find(str, beg=0, end=len(string)):检测字符串中是否包含子字符串 str ,如果指定 beg(开始) 和 end(结束) 范围,则检查是否包含在指定范围内,如果包含子字符串返回开始的索引值,否则返回-1。题目要求返回第一个不重复的字符,那么我们就再遍历一次字符串,遍历的同时,在hash数组中查询当前字符的数量,若为1则保存其下标,跳出循环。原创 2024-03-16 00:30:00 · 78 阅读 · 0 评论 -
华为机试真题实战应用【算法代码篇】-字符串相加(附Python、C++和Java代码)
charAt(i)是字符串中的第i个字符,s.charAt(i)就是S中的第i个字符,因为字符都是用ASCII码存储的,存储的事ASCII码值,用s.charAt(i)减去字符‘0’,就是用s.charAt(i)的码值减去‘0’的码值,得到的值干好就是s中第i个字符的十进制值。首先要知道,字符串长度是可以很长的,也就是两者加法操作很有可能会溢出,需要大数来对他进行操作,防止溢出,但是此时又声明不允许使用大数,所以就不能够来进行直接计算,那就需要我们分开计算了,直接把结果存成字符串才可以了。原创 2024-03-17 00:30:00 · 72 阅读 · 0 评论 -
华为机试真题实战应用【算法代码篇】-字符串转换成整数(附Python、C++和Java代码)
对于一个字符串来说,正负符号往往是在第一位的,如果第一位是数字的话,则表示符号为正。数字0的ascii码值为48,如果字符串的某一个字符减去48如果是在0到9之间则表示该字符可转换为数字,否则就是不合法的数值,直接返回0。对于字符串前几位都为0的情况下,如果sum为0,表示这个0之前还都是0,因此往后再继续循环即可。由于数据是从高位处理的,因此数据每循环一次都是上回值*10再加上本次处理的数据,本题只需缕清逻辑,很快就可以做出来。如果是合法的数值表达式返回数字,否则返回0。原创 2024-03-06 00:30:00 · 135 阅读 · 0 评论 -
华为机试真题实战应用【算法代码篇】-空格替换(附Python、C++和Java代码)
观察后发现一个空格替换会让原来的字符串的长度加2,那么如果定义原字符串的长度为n,那么替换之后的字符串为n+2*空格数。那么就我们定义两个指针,一个指向原字符串末尾,一个指向替换字符串末尾,然后让指向原字符串末尾的指针向前移动,如果不是空格,就把此时的值赋给替换后的字符串。如果从前往后遍历字符串,遇到空格,就需要把%20插入进去,而%20是三个字符,插进去就要后面的字符全部移动,而如果空格一多,移动的频率就会更多,这样显然不是最好的办法。将一个字符串中的空格替换成%20,假设字符串的空间足够大。原创 2024-03-05 00:30:00 · 161 阅读 · 0 评论 -
华为机试真题实战应用【算法代码篇】-最近公共祖先(附Python、C++和Java代码)
如果当前节点的值大于 pp 的值,说明 pp 应该在当前节点的左子树,因此将当前节点移动到它的左子节点;如果当前节点的值小于 pp 的值,说明 pp 应该在当前节点的右子树,因此将当前节点移动到它的右子节点。2)我们在让这两个数中较大的值除以2,所以就可以得出:b=b/2=2;1)如果说我们题目的具体输入是a==b,那么最近公共祖先就是a/2。3)我们在让这两个数种比较大的值除以2,a=a/2=1;(2)将层数高的节点求根节点,直至节点a和b在同一层。1)让这两个数中比较大的值/2=>a=a/2=3;原创 2024-03-06 00:30:00 · 213 阅读 · 0 评论 -
华为机试真题实战应用【算法代码篇】-井字棋(附Python、C++和Java代码)
依据题意,二维数组中1表示我方棋子,0表示空位,-1表示敌方棋子,题目给我们一个棋盘,上面有敌方我方的下棋情况,要求我们判断我发是否获胜,那这个很简单,无非就4种情况,我们遍历枚举一遍就行。board[i][j] == board[i - 1][j - 1] == board[i + 1][j + 1] == 1,即\型获胜。board[i][j] == board[i + 1][j - 1] == board[i - 1][j + 1] == 1,即/型获胜。1)行全为1, 即行的和为3。原创 2024-03-07 00:30:00 · 59 阅读 · 0 评论 -
华为机试真题实战应用【算法代码篇】-组合出合法最小数(附python、C++和JAVA代码实现)
如果拼接出的数字都是“0”开头,则选取值最小的,并且把开头部分的“0”都去掉再输出;第二种解题方式是先组合后排序,运用回溯算法遍历得到所有的组合,再将组合的数值排序,排序后的数值中最后一个数是以0开头的,则排序组合这第一个即为最小的结果,否则往前遍历到第一个首位不为0的数值即为最小的结果。该题运用了两种解题方式,一种是先排序后组合,及将数组从小到大排序,依次遍历拼接,如果存首位不为0的数值,将第一个首位不为0的数值放在最前面,该组合得到的数值即为不是0开头中最小的,或全为0开头中最小的;原创 2024-03-02 00:30:00 · 98 阅读 · 0 评论 -
华为机试真题实战应用【算法代码篇】-树上逃离(附C++和JAVA代码实现)
如果小猴子能跑到树的叶子节点,请输出小猴子跑到叶子节点的最短路径(通过的边最少),比如小猴子从0经过1到达2 (叶子节点) ,那么输出“0->1->2”,否则输出“NULL”。注意如果存在多条最短路径,请按照节点序号排序输出,比如0->1和0->3两条路径,第一个节点0一样,则比较第二个节点1和3,1比3小,因此输出0->1这条路径。解释: 节点4上有障碍物,因此0-3-4这条路不通,节点2和节点6都是叶子节点,但0->1->2比0->1->5->6路径短(通过的边最少) ,因此输出为0->1->2。原创 2024-03-03 00:30:00 · 95 阅读 · 0 评论 -
华为机试真题实战应用【赛题代码篇】-异常的打卡记录(附Java和python代码)
对于同一员工下设备号一致的打卡记录,需要两两对比,如果两个打卡记录的时间小于60分钟并且打卡距离超过5km,则视为异常.但是这里有一个疑点,那就是一旦有两条打卡记录对比异常了,那么其他打卡记录是否还需要和这两条异常记录对比吗?比较打卡记录之间的时间和距离:遍历所有打卡记录,如果同一个员工有2条打卡记录,比较它们之间的时间差和距离差。另外,我理解,同一员工的(非设备号异常)打卡记录不需要再和(设备号异常)的打卡记录对比。1、单条打卡记录自身比较,即单条打卡记录的实际设备号和注册设备号不同,则视为异常。原创 2024-03-04 00:30:00 · 299 阅读 · 0 评论 -
华为机试真题实战应用【算法代码篇】-去除多余空格(附Java、C++和python代码)
在修改关键词坐标时,我们先将关键词的坐标按左区间的大小进行排序,然后遍历关键词坐标,用类似队列的思想,记录小于当前关键词左区间的删除掉的空格的下标,这样子处理的好处是时间复杂度是O(n),具体看代码。给出关键词的起始和结束下标,去除多余空格后刷新关键词的起始和结束下标。,分别表示坐标的左右区间,和关键词的原本序号(自己设定的)。第二行:关键词的开始和结束坐标,关键词间以逗号区分,关键词内的开始和结束位置以单空格区分。第二行:去除多余空格后的关键词的坐标开始和结束位置,为数组方式输出。原创 2024-03-03 00:30:00 · 93 阅读 · 0 评论 -
华为机试真题实战应用【算法代码篇】-简单的解压缩算法(附Java和python代码)
{A3B1{C}3}3代表A字符重复3次,B字符重复1次,花括号中的C字符重复3次,最外层花括号中的AAABCCC重复3次。2、花括号中的字符串加数字N,表示花括号中的字符重复N次。例如压缩内容为{AB}3,表示原始字符串为ABABAB。3、字符加N和花括号后面加N,支持任意的嵌套,包括互相嵌套,例如:压缩内容可以{A3B1{C}3}3。1、字符后面加数字N,表示重复字符N次。2.遇到字符}:计算重复次数,将栈中的字符组合成一个字符串, 复拼接后再入栈。后,将栈中的字符串顺序拼接,得到解压缩后的字符串。原创 2024-03-02 00:30:00 · 69 阅读 · 0 评论 -
华为机试真题实战应用【赛题代码篇】-硬件产品销售方案(附Javapython代码)
某公司目前推出了 AI 开发者套件,Al 加速卡,AI 加速模块,AI服务器,智能边缘多种硬件产品,每种产品包含若干个型号。例如当前库存有 N 种产品,每种产品的库存量充足,给定每种产品的价格,记为 price(不存在价格相同的产品型号)。如果选择任何一种产品都超过了采购金额,那么当前选择是一种方案,加入到结果集中去。首先每一次可以选择一种产品,从组合中选择任意一种产品,只要其不超过采购金额。首先很显然地,我们需要一个集合来存储结果。对于每一种产品,仅仅需要对大于等于其价格的产品进行剪枝即可。原创 2024-03-01 00:30:00 · 67 阅读 · 0 评论 -
华为机试真题实战应用【算法代码篇】-服务器能耗统计(附python、C++和JAVA代码实现)
时间片范围: [0,1000000]: 任务数范围: [1,10000];统计出最小和最大的运行时间,并统计从0到最大运行时间之间每个时间的任务数量,遍历每个任务的开始时间到结束时间并将其任务数量加一。最后,遍历统计的任务数量,空载消化1,单任务消化3,多任务消化3,注意是最小开始时间到最大结束时间之间。给定一个任务列表,请计算出从第一个任务开始,到所有任务结束,服务器的总能耗。服务器有三种运行状态:空载、单任务、多任务,每个时间片的能耗的分别为1、3、4;[1,1] 处于单任务状态,能耗为3*1= 3。原创 2024-02-25 00:30:00 · 108 阅读 · 0 评论 -
华为机试真题实战应用【算法代码篇】-报文回路(附python、C++和JAVA代码实现)
当组播数据从最后一跳路由器发往组播组成员时,往往会经过交换机。由于组播数据的目的MAC地址是组播MAC地址,默认情况下交换机将泛洪此类数据帧,有可能导致不同组的组播流量会被别组的成员接收。IGMP Snooping功能可以控制组播流量在以太网的泛洪范围,避免不同组的组播流量被别组成员接收。当Router将组播报文转发至Switch以后,Switch负责将组播报文转发给组播用户。原创 2024-02-24 00:30:00 · 84 阅读 · 0 评论 -
华为机试真题实战应用【赛题代码篇】-二元组个数(附Java和python代码)
使用两个 HashMap 分别存储数组a和数组b中元素的出现次数。Hashap 的 key 是元素, value 为该元素出现的次数。遍历众数组a对应的 HashMap。对于每个元素,检査该元素是否在数组b的 Hashap 中存在。如果存在,则将数组a中元素的出现次数乘以数组 b 中元素的出现次数,累加到结果中。给定两个数组a,b,若a[i]==b[i]则称[i,j]为一个二元组,求在给定的两个数组中,二元组的个数。第二行输入m个数,表示第一个数组。第四行输入n个数,表示第二个数组。原创 2024-02-28 00:30:00 · 50 阅读 · 0 评论 -
华为机试真题实战应用【赛题代码篇】-羊、狼、农夫过河(附C++、python和JAVA代码实现)
每次携带羊狼过河后,只要河岸两边羊的数量大于狼,或者只有一种动物,羊都不会损失,因此每次携带羊狼时候,我们需要保证确保该次携带是可行的,而且尽可能多带,这样运输次数才会最少,递归调用携带方法,直到所用狼和羊均运送完成。因此,"农夫在时,狼不会攻击羊“,这句话只会影响:船上,羊和狼的关系,即农夫在船上时,如果羊数量原创 2024-02-29 00:30:00 · 132 阅读 · 0 评论 -
华为机试真题实战应用【赛题代码篇】-过滤组合字符串(附Java和python代码实现)
和一个屏蔽字符串“ux”,那么“78”可以组成多个字符串例如:“ux”,“uw”,“vx”,“vw”,过滤这些完全包含屏蔽字符串的每一个字符的字符串,然后输出剩下的字符串。例如7关联"u","v",8关联"x","w",输入一个字符串例如“78”,0 关联 "a","b","c"1 关联 "d","e","f"2 关联 "g","h","i"3 关联 "j","k","l"4 关联 "m","n","o"5 关联 "p","q","r"7 关联 "u","v"8 关联 "w","x"原创 2024-02-27 00:30:00 · 210 阅读 · 0 评论 -
华为机试真题实战应用【算法代码篇】-Linux发行版的数量(附Java、python和C++代码实现)
发行版集是一个或多个相关存在关联的操作系统发行版,集合内不包含没有关联的发行版给你一个 n*n 的矩阵 isConnected,其中 isComnected[i][j] = 1 表示第 i 发行版和第 j 个发行版直接关联,而 isConnected[i][j] =0 表者不直接相连。第一行输入发行版的总数量 N, 之后每行表示各发行版间是否直接相关。返回最大的发行版集中发行版的数量。输出最大的发行版集中发行版的数量。原创 2024-02-28 00:30:00 · 171 阅读 · 0 评论 -
华为机试真题实战应用【赛题代码篇】-不含101的数(附Java和python代码)
递归函数中,p表示当前处理到的二进制位,limit表示当前位是否受到上限制,f表示记忆化数组,arr表示二进制数,pre表示前一位的值,prepre表示前两位的值。区间[1,10]内,5的二进制表示为101,10的二进制表示为1010,因此除了5与10不满足条件外,其他数字都满足条件,因此答案为8。从输入的数值范围可以看出,如果使用第一种方法肯定是会超时的,感兴趣的同学可以自行实现,在评论区分享。第二种是求最值的二进制,然后移动101的位置,求可能的组合个数,总数减去包含的个数就是带输出个数;原创 2024-02-27 00:30:00 · 225 阅读 · 0 评论 -
华为机试真题实战应用【赛题代码篇】-英文输入法(附Java、C++和python代码)
主管期望你来实现英文输入法单词联想功能。需求如下:依据用户输入的单词前缀,从已输入的英文语句中联想出用户想输入的单词,按字典序输出联想到的单词序列,如果联想不到,请输出用户输入的单词前缀。注意:1. 英文单词联想时,区分大小写2. 缩略形式如”don't”,判定为两个单词,”don”和”t”3. 输出的单词序列,不能有重复单词,且只能是英文单词,不能有标点符号输入描述:输入为两行。首行输入一段由英文单词word和标点符号组成的语句str;接下来一行为一个英文单词前缀pre。原创 2024-02-26 00:30:00 · 380 阅读 · 0 评论 -
华为机试真题实战应用【算法代码篇】-AI面板识别(附JAVA、C++和python代码实现)
对排序后list的第一个灯,作为基准灯,找到和基准灯在同一行的灯。这个题可以使用List来进行灯坐标存储,然后先找出未排序的最大的,然后是找出和最大的灯处于同一行的,按x1坐标进行排序。给出的坐标是左上角和右下角,且排序是找所有未排序的点的最高点作为基准点,然后找到基准点那一行进行排序,例如说明中的图(编号1和3位是1行 2是1行 4和5 是一行 )在实现思路上,我们已经有灯的左上角及右下角坐标,那么我们可以算出每个灯的中心坐标以及半径,假设以(X,Y)表示中心坐标,以R表示半径。直到所有灯泡遍历结束。原创 2024-02-25 00:30:00 · 108 阅读 · 0 评论 -
华为机试真题实战应用【算法代码篇】-用户调度问题(附python、C++和JAVA代码实现)
按照题目意思,用户是串行调度的,因此执行顺序不能把,即dfs第一层必须选15 8 17,第二层必须选1 2 2 0 9,第三层必须选1175。假设当前有n个待串行调度用户,每个用户可以使用A/B/C三种不同的调度策略,不同的策略会消耗不同的系统资源。请你根据如下规则进行用户调度,并返回总的消耗资源数。3.每个用户依次选择当前所能选择的对系统资源消耗最少的策略(局部最优),如果有多个满足要求的策略,选最后一个。相邻的用户不能使用相同的调度策略,例如,第1个用户使用了A策略,则第2个用户只能使用B或者C策好。原创 2024-02-24 00:30:00 · 115 阅读 · 0 评论 -
华为机试真题实战应用【算法代码篇】-通过软盘拷贝文件(附python、C++和JAVA代码实现)
首先需要计算选则的文件占用的block大小:curBlock=Math.ceil(nums[0] / 512.0),如果j的大小比curBlock还小,说明不能放入nums[0]这个文件,反之,如果j>=curBlock,那么此时的dp[0][j]=nums[0]。对于dp[i][j](i>=1,j>=1)来说。1.dp[i][0]代表,最多选nums前(i+1)个文件,使其占用的block个数不超过0时的最大文件和,很明显只要选了文件,其占用的block就不可能为0个,所以dp[i][0]=0。原创 2024-02-23 00:30:00 · 81 阅读 · 0 评论 -
华为机试真题实战应用【算法代码篇】-数据最节约的备份方法(附python、C++和JAVA代码实现)
比如上面的案例中,当前文件为80,两个光盘的剩余空间分别为100和200,如果放入100,那么两个剩余空间变为:20和200,最小值为20;如果nums[i]+最大剩余空间原创 2024-02-22 00:30:00 · 140 阅读 · 0 评论 -
华为机试真题实战应用【算法代码篇】-最长公共后缀(附python、C++和JAVA代码实现)
2.之后,再找出suffix和strs[1]的最长公共后缀,并覆盖给suffix,按此逻辑继续找出suffix和其他strs[i]的最长公共后缀当然,在上面过程中,一旦发现sufix=="",即最长公共后缀是空串,则可以直接返回@Zero。否则,返回suffix。每次取查找范围的中间值 mid ,判断每个字符串的长度为 mid 的前缀是否相同,如果相同则最长公共前缀的长度一定大于或等于 mid ,如果不相同则最长公共前缀的长度一定小于 mid ,通过上述方式将查找范围缩小一半,直到得到最长公共前缀的长度。原创 2024-02-21 00:30:00 · 75 阅读 · 0 评论 -
华为机试真题实战应用【算法代码篇】-N进制减法(附python、C++和JAVA代码实现)
先不考虑异常情况,做 N 进制减法运算,最简单的就是将 N 进制数转为 十进制,然后进行十进制减法,得到的差值,再转为 N 进制数。主管期望你实现一个基于字符串的N进制的减法需要对输入的两个字符串按照给定的N进制进行减法操作,输出正负符号和表示结果的字符串.另外还有一个隐藏的异常就是,一个 N 进制数,它的每一位不可能大于等于 N,这也是我们需要考虑的异常情况。4、输入的被减数和减数,除了单独的 0 以外,不能是以 0 开头的字符串。其一为减法计算的结果,-1表示出错,0表示结果为整数,1表示结果为负数。原创 2024-02-20 00:30:00 · 65 阅读 · 0 评论 -
华为机试真题实战应用【算法代码篇】-图像物体的边界(附python、C++和JAVA代码实现)
1)如下图,与像素5的格子相邻的像素1的格子(0,0)、(0,1)、(0,2)、(1,0)、(1,2)、(2,0)、(2,1)、(2,2)、(4,4)、(4,5)、(5,4)为边界,另(0,0)、(0,1)、(0,2)、(1,0)、(1,2)、(2,0)、(2,1)、(2,2)相邻,为1个边界,(4,4)、(4,5)、(5,4)相邻,为1个边界,所以下图边界个数为2。第二行开始,是M行N列的像素的二维数组,仅包含像素1和5。(2,2)、(3,3)相邻。像素1代表的物体的边界个数。第一行,行数M,列数N。原创 2024-02-19 00:30:00 · 545 阅读 · 0 评论 -
华为机试真题实战应用【算法代码篇】-出错的或电路(附python、C++和JAVA代码实现)
num2[i]和num2[j]不能均为1,即num2的对应位置,至少有存在1个0。因为如果存在num2[i] == num2[j] == 1,那么无论num1[i]和num1[j]是什么内容,或运算的结果一定存在num_or[i] == num_or[j] == 1,不会因为num1[i]和num1[j]的交换而改变。bin2值为0的位只有1个,就是第三位,而对应bin1的第三位的值为0,因此bin1需要将该位值变为1,才能产生不同结果,而变为1的交换策略只有一个,那就是其第二位和第三位交换。原创 2024-02-18 09:11:52 · 69 阅读 · 0 评论 -
华为机试真题实战应用【算法代码篇】-查找接口成功率最优时间段(附python、C++和JAVA代码实现)
这里,我们为了避免陷入遍历 j+1 到来计算区间[j+1,i]的总和,我们可以事先定义一个dp 数组,dp[i]表示以 0~i 区间的总和因此[j+1,i]区间总和的计算就是 dp[i]- dp[j],同时为了避免计算平均失败率,我们可以定义一个 max 数组,max[len]表示长度为 len的区间的最大失败率,比如最小平均失败率容忍值是 1,则长度为 5 的区间的最大失败率为5*1=5。可以考虑使用递归的方式来做,不断的移动数组的游标,尽可能找出以该游标开始的最大的范围的结束索引。原创 2024-02-17 00:30:00 · 476 阅读 · 0 评论