JS | 华为OD机试AB卷
文章平均质量分 69
注意,本专栏内容转载自“伏城之外”的同名专栏,已获得“伏城之外“的授权。但是本专栏只有JavaScript语言实现,因此价格更优惠,适合熟悉JavaScript语言的考友。
优惠券已抵扣
余额抵扣
还需支付
¥49.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
AsiaFT.
持之以恒,水滴石穿
展开
-
华为OD机试(A&B)真题目录(JavaScript)
2023(A+B)卷,JavaScript语言实现原创 2023-07-30 10:54:37 · 407 阅读 · 0 评论 -
华为OD机试 - 创建二叉树(JS)
当我们遍历operations时,operations[i] = [height, index] ,其实就是找 tree[height][index]父节点,在该父节点下插入node(i)子节点,而在该父节点下插入node(i)子节点,其实就是向tree[height+1]数组中加入node(i)节点,比如。上图就是用例1的二叉树,输出时,由于题目说:层序遍历会遍历有值节点的 null 子节点,因此为上面二叉树的有值节点加入null子节点,如下图所示。这个就很简单了,具体实现看代码。原创 2023-10-24 11:35:47 · 67 阅读 · 0 评论 -
华为OD机试 - 工单调度策略(JS)
假设华为和运营商A签订了运维合同,部署了一套调度系统,只有1个外线工程师(FME),每个工单根据问题严重程度会给一个评分,在SLA时间内完成修复的工单,华为获得工单评分对应的积分,超过SLA完成的工单不获得积分,但必须完成该工单。当小区通信设备上报警时,系统会自动生成待处理的工单,华为工单调度系统需要根据不同的策略,调度外线工程师(FME)上站修复工单对应的问题。假设从某个调度时刻开始,当前工单数量为N,不会产生新的工单,每个工单处理修复耗时为1小时,请设计你的调度策略,完成业务目标。原创 2023-10-24 11:35:58 · 61 阅读 · 0 评论 -
华为OD机试 - 几何平均值最大子数组(JS)
比如下面min_pre_fact代表的时0~i-L范围内最小的子数组(注意,是范围内,不一定就是0~i-L),而fact代表的是0~i子数组,然后用fact / min_pre_fact 其实就能得出一个长度大于L的子数组的几何平均值/avg的情况。我想了一下,本题没有什么好的解法,我们只能暴力枚举所有子数组情况,并求出每个子数组的几何平均值,保留最大的,如果存在多个最大几何平均值子数组,那么就保留长度最短的,如果有多个长度相同的,则保留起始索引最靠前的。(K个数的几何平均值为K个数的乘积的K次方根)原创 2023-10-24 11:36:08 · 24 阅读 · 0 评论 -
华为OD机试 - 九宫格(JS)
基于回溯算法的全排列求解是一种暴力解法,即枚举出全部排列情况,因此对大数量级而言,我们应该慎用,但是本题,已经明确指出了求解9个数字的全排列,因此排列情况共有9!B9),从排列的第1个数字开始,遇到Ai<Bi,则排列A<排列B (1<=j<=9)。现在有一种新的玩法,给九个不同的数字,将这九个数字放在3×3的格子中,要求每行、每列以及两个对角线上的三数之积相等(三阶积幻方)。排列后的九个数宇中:第1-3个数字为方格的第一行,第4-6个数宇为方格的第二行,第7-9个数字为方格的第三行。0<数字<10^7。原创 2023-10-24 11:36:22 · 31 阅读 · 0 评论 -
华为OD机试 - 硬件产品销售方案(JS)
某公司目前推出了AI开发者套件,AI加速卡,AI加速模块,AI服务器,智能边缘多种硬件产品,每种产品包含若干个型号。输入包含采购金额amount和产品价格列表price。种产品,每种产品的库存量充足,给定每种产品的价格,记为price(不存在价格相同的产品型号)。更新了JS代码的输出格式逻辑,即在逗号后面加空格。请为合作厂商列出所有可能的产品组合。元的硬件产品搭建自己的AI基座。简单的可重复元素组合求解。现某合作厂商要采购金额为。原创 2023-10-24 11:36:32 · 22 阅读 · 0 评论 -
华为OD机试 - 组装新的数组(JS)
我们可以使用回溯算法来在N中选取多个元素(同一个元素可以重复选取),这个逻辑其实就是求可重复元素组合情况,每得到一个组合就看其和sum是否等于m,或者m - sum 是否已经小于 N.min,若是,则该组合是符合要求的,count++,否则不符合要求,继续找。当sum > m时,则说明往后的组合已经无法符合要求,此时需要进行回溯了。在数组N任意选取多个元素,且同一个元素可以重复选取,只要最终选取的所有元素之和等于m,或者:小于m但是差值不超过N.min()。第一行输入是连续数组N,采用空格分隔。原创 2023-10-24 11:36:42 · 22 阅读 · 0 评论 -
华为OD机试 - 农场施肥(JS)
但是,本题min~max之间有1 ≤ fields[i] ≤ 10^9,并且求解每种k对应的spend都需要遍历1 ≤ fields.length ≤ 10^4次,因此上面算法的时间复杂度是10^9 * 10^4 = 10^13,这是必然超时的。因此,k的取值范围其实就是果林最小面积min ~ 最大面积max之间,我们完全可以遍历min~max之间的所有可能给k,然后求出能效k施肥完所有果林需要的天数spend,然后求出spend===n的所有情况中最小的k作为题解。因此,个人认为本题K应该取整数。原创 2023-10-24 11:37:03 · 20 阅读 · 0 评论 -
华为OD机试 - 快速开租建站(JS)
接下来 relationsNum 行,每行包含两个id,描述一个依赖关系,格式为:IDi IDj,表示部署任务i部署完成了,部署任务j才能部署,IDi 和 IDj 值的范围为:[0, taskNum)我们可以先同时部署任务项0和任务项1,然后部署任务项2,最后同时部署任务型3和任务型4.最短开战时间为3。我们可以先同时部署任务型0,任务型1,任务项2。给定一个站点部署任务项和它们之间的依赖关系,请给出一个站点的最短开站时间。没有依赖的任务可以并行部署,优秀的员工们会做到完全并行无等待的部署。原创 2023-10-24 11:36:52 · 48 阅读 · 0 评论 -
华为OD机试 - 递增字符串(JS)
另外,本题0 < s的长度 < 100000,如果使用dp数组的话,最坏需要定义一个100000长度的数组,这是有可能爆内存的,因此,下面代码中我不是dp数组,直接使用leftA变量。给出一个字符串s,允许修改字符串中的任意字符,即可以将任何的’A’修改成’B’,也可以将任何的’B’修改成’A’,0~i闭区间内理论会有 i+1 个A,而目前有dp[i] 个A,因此需要修改 i + 1 - dp[i] 次。此时,我们应该记录将字符串全部修改为A的次数,和全部修改为B的次数,即上面两个绿色箭头分界线。原创 2023-10-24 11:37:13 · 27 阅读 · 0 评论 -
华为OD机试 - 查找充电设备组合(JS)
某个充电站,可提供n个充电设备,每个充电设备均有对应的输出功率。任意个充电设备组合的输出功率总和,均构成功率集合P的1个元素。功率集合P的最优元素,表示最接近充电站最大输出功率p_max的元素。第2行每个充电设备的输出功率 可以当成 不同物品的重量以及价值,即重量=价值。第3行充电站最大输出功率p_max 可以当成 背包承重。现在要求:背包承重下能装入的最大价值。本题可以当成01背包问题处理。关于01背包问题,大家可以看。功率集合P的最优元素。原创 2023-10-24 11:37:26 · 36 阅读 · 0 评论 -
华为OD机试 - 荒地(JS)
其中不能建设的区域发电量为0kw,可以发电的区域根据光照,地形等给出了每平方公里年发电量x千瓦。第一行输入为调研的地区长,宽,以及准备建设的电站【长宽相等,为正方形】的边长最低要求的发电量。调研的区域大小为长2宽5的矩形,我们要建设的电站的边长为2,建设电站最低发电量为6.祖国西北部有一片大片荒地,其中零星的分布着一些湖泊,保护区,矿区;我们希望能够找到其中集中的矩形区域建设电站,能够获得良好的收益。长宽为2的正方形满足发电量大于等于6的区域有4个。根据考友反馈,发电量为0的区域也可以建站。原创 2023-10-24 11:37:42 · 39 阅读 · 0 评论 -
华为OD机试 - 上班之路(JS)
输入的第一行为两个整数t,c(0 ≤ t,c ≤ 100),t代表可以拐弯的次数,c代表可以清除的路障个数。如果深度优先搜索的下一步的代价是ut > t,或者uc > c,则说明下一步无法继续走了。输入的第二行为两个整数n,m(1 ≤ n,m ≤ 100),代表地图的大小。生活在美丽的蓝鲸城,大马路都是方方正正,但是每天马路的封闭情况都不一样。输出是否可以从家里出发到达公司,是则输出YES,不能则输出NO。2、支持破壁,即清除障碍,但是最多只能破壁c次数。可以清除给定个数的路障,现在你的任务是计算。原创 2023-10-24 11:37:52 · 35 阅读 · 0 评论 -
华为OD机试 - 最多等和不相交连续子序列(JS)
第一步,我们可以用动态规划前缀和的思路求出任意区间的连续子序列的和,具体请看下面博客中:一维数组前缀和的应用。给定一个数组,我们称其中连续的元素为连续子序列,称这些元素的和为连续子序列的和。数组中可能存在几组连续子序列,组内的连续子序列互不相交且有相同的和。2、求解每个“和” 下的最大不相交区间数量,保留最大数量作为题解。这样最后得到的不相交区间数量count,就是最大不相交区间数量。第一行是一个整数M,表示满足要求的最多的组内子序列的数目。1、将和相同的连续子序列的区间统计在一起。原创 2023-10-24 11:37:59 · 28 阅读 · 0 评论 -
华为OD机试 - 去除多余空格(JS)
之后needDel遍历出19,然后对比每一个arr范围的开始位置,发现和[19,25]产生了冲突,因为19坐标位置既是要删除的空格,又是一个关键词的起始位置,造成这种冲突的原因是此时needDel 19 和 arr范围[19,25] 已经不同步了。首先needDel遍历出18,然后对比每一个arr范围的开始位置,发现[20,26], [43,45]在18后面,因此当18位置的空格删除后,这两个范围都要前移,因此arr变为了[[8,15], [19,25], [42,44]]。这个有点大啊,会不会爆内存呢?原创 2023-10-25 11:16:53 · 42 阅读 · 0 评论 -
华为OD机试 - 优雅子数组(JS)
利用双指针(即一个双重for)找到所有子数组(有点暴力),外层 i 指针指向子数组左边界,内层 j 指针指向子数组右边界,然后统计子数组内部各数字出现个数,若有数字出现次数大于等于k,则该子数组符合要求,统计结果ans++。其实上面逻辑超时的原因很容易发现,就是暴力枚举了所有子数组,因此必须优化子数组获取逻辑,和一位网友讨论后,发现上面逻辑有一个可以优化的点。例如,数组1,2,3,1、2,3,1,它是一个3-优雅数组,因为元素1出现次数大于等于3次,此时其实就遗漏部分符合要求的子数组情况。原创 2023-10-24 11:38:10 · 45 阅读 · 0 评论 -
华为OD机试 - 羊、狼、农夫过河(JS)
因此,”农夫在时,狼不会攻击羊“,这句话只会影响:船上,羊和狼的关系,即农夫在船上时,如果羊数量 <= 狼数量,此时因为农夫在,因此狼不会攻击羊。羊、狼、农夫都在岸边,当羊的数量小于狼的数量时,狼会攻击羊,农夫则会损失羊。但是,上面妖怪过河问题是基于暴力枚举法+状态搜索树实现的,我试了一下5 3 3的用例,发现时间复杂度贼高。第一行输入为M,N,X, 分别代表羊的数量,狼的数量,小船的容量。备注:农夫在或农夫离开后羊的数量大于狼的数量时狼不会攻击羊。农夫在或农夫离开后羊的数量大于狼的数量时狼不会攻击羊。原创 2023-10-25 11:17:01 · 33 阅读 · 0 评论 -
华为OD机试 - 计算快递主站点(JS)
n-1,用s[i][j]表示i-j是否可达,s[i][j]=1表示i-j可达,s[i][j]=0表示i-j不可达。快递业务范围有N个站点,A站点与B站点可以中转快递,则认为A-B站可达,如果A-B可达,B-C可达,则A-C可达。现用二维数组给定N个站点的可达关系,请计算至少选择从几个主站点出发,才能可达所有站点(覆盖所有站点业务)。之后N行表示站点之间的可达关系,第i行第j个数值表示编号为i和j之间是否可达。可以使用并查集求解。说明:s[i][j]与s[j][i]取值相同。选择0号站点可以覆盖0、1站点,原创 2023-10-25 11:17:11 · 25 阅读 · 0 评论 -
华为OD机试 - 最大数字(JS)
然后对他们进行初始化,初始时unused就是统计输入字符串中各数字字符的出现次数,而reserve每个数字字符的个数都初始化为0。如果此时stack栈顶没有元素,则将遍历的c直接压入栈,然后unused[c]--,reserve[c]++给定一个由纯数字组成以字符串表示的数值,现要求字符串中的每个数字最多只能出现2次,超过的需要进行删除;如”34533″,数字3重复超过2次,需要删除其中一个3,删除第一个3后获得最大数值”4533″。请返回经过删除操作后的最大的数值,以字符串表示。原创 2023-10-25 11:17:20 · 18 阅读 · 0 评论 -
华为OD机试 - 分奖金(JS)
本题最简单的思路是双重for,但是时间复杂度是O(m^2),而m取值1~10000,这个数量级非常有可能超时。按照工号的顺序往后排列,遇到第一个数字比自己数字大的,那么,前面的员工就可以获得“距离*数字差值”的奖金。第2个员工后面没有比他数字更大的员工,第3个员工是最后一个员工,后面也没有比他更大数字的员工,所以他得到的奖金是3。如果遇不到比自己数字大的,就给自己分配随机数数量的奖金。那么第2个员工的数字10比第1个员工的数字2大,所以,他获得他分配的随机数数量的奖金,就是10。原创 2023-10-25 11:17:28 · 68 阅读 · 0 评论 -
华为OD机试 - 最差产品奖(JS)
下面JS解法中用的数组模拟的单调队列,最优解法可以使用双端队列,但是需要自己模拟,具体双端队列的模拟可以看上面链接博客。第二行,产品的评分序列,比如[12,3,8,6,5],产品数量N范围是-10000 < N <10000。评选的标准是依次找到从当前产品开始前M个产品中最差的产品,请给出最差产品的评分序列。评选的方式是首先对每个产品进行评分,然后根据评分区间计算相邻几个产品中最差的产品。第一行,数字M,表示评分区间的长度,取值范围是0<M<10000。12,3,8 最差的是3。3,8,6 最差的是3。原创 2023-10-25 11:17:36 · 30 阅读 · 0 评论 -
华为OD机试 - 基站维护工程师(JS)
题目中说 1 < n < 10 ,也就是说最多有9个站点,而我们求解n-1个站点的全排列,即8个站点的全排列,一共有8!某地方有 n 个基站(1 < n < 10),已知各基站之间的距离 s(0 < s < 500),并且基站 x 到基站 y 的距离,与基站 y 到基站 x 的距离并不一定会相同。到站点1的距离0,到站点2的距离2,到站点3的距离1。到站点1的距离1,到站点2的距离0,到站点3的距离2。到站点1的距离2,到站点2的距离1,到站点3的距离0。站点数n和各站点之间的距离(均为整数)原创 2023-10-25 11:17:43 · 28 阅读 · 0 评论 -
华为OD机试 - 数字加减游戏(JS)
因此,我们可以让x从0开始尝试,然后尝试1,-1,然后尝试2,-2,直到找到一个x能够让(比如用例1)(9 - 5*x) / 2 为一个整数。输入的唯一一行包含四个正整数s,t,a,b(1<=s,t,a,b<=105),并且a!输出的唯一一行包含一个整数,表示最少需要使用多少次a才能将数字s变成数字t。小明在玩一个数字加减游戏,只使用加法或者减法,将一个数字s变成数字t。由于本题1<=s,t,a,b<=105,数量级较小,因此上面逻辑可行。请问小明最少可以用多少次a,才能将数字s变成数字t。原创 2023-10-25 11:17:51 · 45 阅读 · 0 评论 -
华为OD机试 - 机房布局(JS)
这是因为,第2个M和第1个M存在交集后,我们就将第1个M弹出了,因此第2个M不仅代表了自身需要的电箱数,还代表了被弹出的第1个M的电箱数,因此即使第3个M和第2个M有交集,我们也不能将第2个M弹出,因为弹出的话,就会丢失第1个M需要的电箱数。接下来就是最少电箱的分配策略了,本题要求每台机柜的两边,至少有一边上配有电箱,那么最少电箱分配,肯定是尽可能地让两个机柜共享一个电箱。即,如果机柜处于 i 位置,则该机柜的区间为 [i-1, i+1],需要注意的是i-1和i+1不能超过边界,如果超过边界,则取边界值。原创 2023-10-25 11:17:58 · 40 阅读 · 0 评论 -
华为OD机试 - 字符串解密(JS)
将输入字符串1里的加扰子串“123ad”、“ffc79”去除后得到有效子串序列:"my"、"pt",其中"my"里不同字母的数量为2(有‘m’和'y'两个不同字母),“pt”里不同字母的数量为2(有'p'和't'两个不同字母);(1)这个有效子串里不同字母的数量不超过且最接近于string2里不同字母的数量,即小于或等于string2里不同字母的数量的同时且最大。string1由小写英文字母(’a’~’z’)和数字字符(’0’~’9’)组成,而加扰字符串由’0’~’9’、’a’~’f’组成。原创 2023-10-25 11:18:06 · 39 阅读 · 0 评论 -
华为OD机试 - 简单的解压缩算法(JS)
2、花括号中的字符串加数字N,表示花括号中的字符重复N次。例如压缩内容为{AB}3,表示原始字符串为ABABAB。1、字符后面加数字N,表示重复字符N次。例如:压缩内容为A3,表示原始字符串为AAA。另外,发现字符“{”时,需要记录它在stack栈中位置到idxs数组中;现需要实现一种算法,能将一组压缩字符串还原成原始字符串,1、备注说明:保证输入的都是合法有效的压缩字符串。若发现非数字的字符,则直接压入栈stack中;,例如:压缩内容可以{A3B1{C}3}3。3、字符加N和花括号后面加N,支持。原创 2023-10-25 11:18:13 · 26 阅读 · 0 评论 -
华为OD机试 - 二进制差异数(JS)
那么差异值就是0110,相似值就是1000,可以发现,A,B最高位的1,在按位异或运算下被换成0,在按位与的运算下,变成了1,因此这种情况下,相似值必然大于差异值,不符合要求。那么差异值就是1100,相似值就是0010,可以发现,A,B的最高位不同,因此按位异或运算下被换成了1,而按位与运算下变成了0,因此这种情况下,差异值必然大于相似值,符合要求。有了以上规律,我们可以统计出,每个数的最高位1处于哪一位,最高位1所处位数相同的数之间无法组合,最高位1所处位数不同的数之间可以组合。假设A=5,B=3;原创 2023-10-25 11:18:20 · 34 阅读 · 0 评论 -
华为OD机试 - 最优资源分配(JS)
某块业务芯片最小容量单位为1.25G,总容量为M*1.25G,对该芯片资源编号为1,2,...,M。用户配置序列:用户配置是按次序依次配置到芯片中,如果用户配置序列种某个配置超过了芯片总容量,丢弃该配置,继续遍历用户后续配置。用户配置是按次序依次配置到芯片中,如果用户配置序列种某个配置超过了芯片总容量,丢弃该配置,继续遍历用户后续配置。某块板卡上集成了N块上述芯片,对芯片编号为1,2,...,N,各个芯片之间彼此独立,不能跨芯片占用资源。M:每块芯片容量为 M * 1.25G,取值范围为:1~256。原创 2023-10-25 11:18:35 · 38 阅读 · 0 评论 -
华为OD机试 - 信号发射和接收(JS)
2.1、如果anth[i][j] > top,则将stack栈顶的top弹出,然后anth[i][j]对应的ret[i][j]++,表示anth[i][j]天线新增接收一个信号,而由于stack栈是递减栈,因此anth[i][j]还可以继续接收新栈顶天线的信号。其实这一步,不需要走到anth[0][2],因为anth[0][1] >= anth[0][0],因此anth[0][0]必然会被anth[0][1]遮挡,导致无法继续向东发射。原创 2023-10-25 11:18:27 · 25 阅读 · 0 评论 -
华为OD机试 - 任务调度(JS)
task5在21时刻到达,此时CPU正在执行task4,但是task5的优先级更高,因此task5获得执行权开始执行,task4进入等待队列,task5需要9个时间,但是执行到时刻22时,task6到达了,但是task6的优先级和task5相同,因此task5执行不受影响,task5会在21 + 9 = 30 时刻执行完成。task1在1时刻到达,此时CPU空闲,因此执行task1,task1需要执行5个时间,而执行期间没有新任务加入,因此task1首先执行完成,结束时刻是6。原创 2023-10-25 11:18:42 · 66 阅读 · 0 评论 -
华为OD机试 - 组合出合法最小数(JS)
首先,按照前面的规则将数组元素排序,排序后,检查数组头元素是否以“0”开头,如果是的话,则开始遍历数组后面的元素,直到找到一个不以“0”开头的元素x,然后将元素x取出,并插入到数组头部。但是,如果数组中元素长度不全相同的话,则此时直接字典序升序,可能无法得到最小组合数,比如数组 [3, 32, 321],按照字典序升序后变为 [3, 32, 321],然后进行拼接,得到组合数332321,但是这个组合数显然不是最小的,最小的组合数应该是 321323。如上面标注的绿色 + 红色。原创 2023-10-26 10:52:47 · 28 阅读 · 0 评论 -
华为OD机试 - 最佳对手(JS)
下面代码中,我并没有按照队伍实力值得粒度进行分段,而是直接在分段过程中,计算出匹配队伍得实力差,即:分段记录得是两两匹配的实力差,上面按照队伍的分段,可以修改为实力差分段。可以发现,对于奇数个队伍而言,正向匹配的话,其实就是从第0个实力差开始选,然后隔一个选一个,即按照序号选的话,就是0,2,4,6,....,n-2。但是最后三个队伍,比如上图21,26,27,我们应该选择【21,26】和【26,27】中较小的,其实就是对于最后两个实力差5,1中选择较小的。游戏里面,队伍通过匹配实力相近的对手进行对战。原创 2023-10-26 10:52:56 · 30 阅读 · 0 评论 -
华为OD机试 - 士兵过河(JS)
对于动态规划解法,由于是从0人过河递推到N人过河,因此不需要二分尝试过河人数,而是可以直接基于dp[i]来实时比较T,如果超过了T,则说明只能过河 i 人,耗时dp[i-1]如果a[y] > a[x] * 10,我们应该选择a[x] * 10,即让较快的士兵单独划船过河,这样耗时更短。即在0~N中尝试找到成功过河的人数,其中0指的是成功过河的人数为0个,N指的是成功过河的人数为N个。假设x士兵划船用时为a[x],y士兵划船用时为a[y],a[x] < a[y]第三行:a[0] a[1] …原创 2023-10-26 10:53:07 · 25 阅读 · 0 评论 -
华为OD机试 - 最多获得的短信条数、云短信平台优惠活动(JS)
Pi为充值 i 元获得的短信条数。第二行给出售价表, P1, P2, …Pn , 其中 1 ≤ n ≤ 100 ,现在给出客户预算,和优惠售价序列,求最多可获得的短信总条数。第一行客户预算M,其中 0 ≤ M ≤ 10^6。某云短信厂商,为庆祝国庆,推出充值优惠活动。如果大家不是很清楚完全背包的求解,可以看。本题是完全背包问题。原创 2023-10-26 10:53:30 · 29 阅读 · 0 评论 -
华为OD机试 - 优选核酸检测点(JS)
通过上图,我们可以看出:在10:30~12:00期间不会有人加入,只会有人离开,每分钟离开1人,因此到12:00时,最多离开 12*60 - (10*60+30) = 90人,而10:30时只有19人排队,因此到12:00时,检测点1只有0人排队。我们可以通过求区间交集的方式,来获取张三【出发时间,到达时间】 和 【8:00,10:00】以及【10:00, 12:00】,以及【12:00, 14:00】以及【14:00,20:00】的交集。张三最迟做完核酸的时间点,不能早于8点,不能迟于20点。原创 2023-10-26 10:53:16 · 80 阅读 · 0 评论 -
华为OD机试 - 查找树中元素(JS)
y表示节点在该层内的相对偏移,从左至右,第一个节点偏移0,第二个节点偏移1,依次类推;matrix2一开始是空数组[],然后遍历得到根节点,压入第0行的数组元素中,但是第0行没有数组元素,因此就构造一个[val]压入,同理处理根节点的左子节点,然后继续处理左子节点的左子节点,因此第一个深搜回溯时,得到。上面这句话的意思是,matrix[i] (是一个一维数组),我们用arr = matrix[i],则arr[0]表示节点的内容值,arr[1]、arr[2]表示的是该节点的子节点在matrix中的索引位置。原创 2023-10-26 10:53:43 · 22 阅读 · 0 评论 -
华为OD机试 - 开放日活动、取出尽量少的球(JS)
因此,我们可以发现,maxCapacity取值2时,剩余球数最多,总数量小于SUM=14,符合要求,且取出的球最少,分别为0,1,0,3,3,0,2。如果maxCapacity值设置为2,则所有桶中的球最多只保留2个,如下图所示,剩余球总数13个,也符合要求。如果maxCapacity值设置为3,则所有桶中的球最多只保留3个,如下图所示,剩余球总数17个,不符合要求。如果maxCapacity值设置为1,则所有桶中的球最多只保留1个,如下图所示,剩余球总数7个,也符合要求。原创 2023-10-26 10:53:55 · 27 阅读 · 0 评论 -
华为OD机试 - 最优高铁城市修建方案(JS)
之后,我们在将 “可以建高铁” 的列表 按照成本费用升序排序(Kruskal算法),然后遍历排序后列表,依次将“可以建高铁” 的两个城市(两个顶点)尝试纳入连通分量中,如果有环,则不纳入,无环,则纳入,纳入的话,则将成本费用计入minFee中。其实,不仅仅在上面遇到相同权重边时,需要判断是否形成环,在前选择每一条边时都需要判断是否形成环,一旦选择的边能够形成环,那么我们就应该舍弃它,选择第二小的权重边,并继续判断。此时选择的边数已经达到了n-1条,因此可以结束逻辑,而现在得到的就是最小生成树。原创 2023-10-26 10:54:03 · 23 阅读 · 0 评论 -
华为OD机试 - 寻找符合要求的最长子串(JS)
由于本题描述中说:字符串s,每个字符范围[0-9a-zA-Z],以及屏蔽字符取值范围[0-9a-zA-Z],因此我们统计滑窗内部字符数量时,可以使用长度为128的数组来作为容器,因为要统计的字符的ASCII码必然在0~128范围中。第二行为:字符串s,每个字符范围[0-9a-zA-Z],长度范围[1, 10000]第一行为:要求不包含的指定字符,为单个字符,取值范围[0-9a-zA-Z]一个整数,满足条件的最长子串的长度;请你找出满足该条件的最长子串的长度。如果不存在满足条件的子串,则返回0。原创 2023-10-26 10:54:22 · 36 阅读 · 0 评论 -
华为OD机试 - 计算网络信号、信号强度(JS)
网络信号经过传递会逐层衰减,且遇到阻隔物无法直接穿透,在此情况下需要计算某个位置的网络信号值。输入为三行,第一行为 m 、n ,代表输入是一个 m × n 的数组。第三行是 i 、 j,代表需要计算array[i][j]的网络信号值。每连续 n 个数代表一行,再往后 n 个代表下一行,以此类推。对应的值代表对应的网格是空旷位置,还是信号源,还是阻隔物。输出对应位置的网络信号值,如果网络信号未覆盖到,也输出0。需要输出第1行第4列的网络信号值,如下图,值为2。array[m][n] 的二维数组代表网格地图,原创 2023-10-26 10:54:13 · 32 阅读 · 0 评论