![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
华为OD算法
文章平均质量分 54
华为OD算法题解
harryptter
这个作者很懒,什么都没留下…
展开
-
[华为OD] B卷 树状结构查询 200
题目不难,就是构建一个树状的数据结构,只是遍历打印的时候需要注意下,如果子节点有多重树的话,先打印子节点,再打印子节点的子节点。第一行输入行数,下面是多行数据,每行以空格区分节点和父节点。树中的节点是唯一的,不会出现两个节点,是同一个名字。输入一个节点之后,请打印出来树中他的所有下层节点。通常使用多行的节点、父节点表示一棵树,比如。输出查询节点的所有下层节点。原创 2024-05-09 18:46:38 · 330 阅读 · 0 评论 -
[华为OD] C卷 田忌赛马 DFS 200
这边因为数组大小不超过10,所以可以采用DFS暴利解法,把所有的数据都拿到比较,然后找出最优解的个数就可以了。给定两个只包含数字的数组a, b,调整数组a里面数字的顺序,使得尽可能多的a[i] >b[i]。有两个a数组的排列可以达到最优结果[ 12,20,11] 和[11,20,12] ,故输出2。输入的第一行是数组a中的数字,其中只包含数字,每两个数字之间相隔一个空格,a数组大。输入的第二行是数组b中的数字,其中只包含数字,每两个数字之间相隔一个空格,b数组大。输出所有可以达到最优结果的a数组的数量。原创 2024-05-09 17:44:53 · 395 阅读 · 0 评论 -
[华为OD]BFS C卷 200 智能驾驶
那么在经过加油站的坐标时候,加油站坐标的visit[x][y],还是为0,不能变为1,防止其他路径更少油量,由于visit[x][y]==0,而不能到加油站,结果就不对。此时,先根据oilStations,拿到抵达这个加油站当前的最少油量prsentLeastOil,如果这个路径到这个加油站的最少油量。4)当走到任意坐标时候,油量足够,而且汽车加过油,那么初始油量应该不变,因为加过油,剩余油量在加油站那个坐标直接变为100了。后面一个M*N的矩阵,其中的值是0或-1或正整数,加油站的总数不超过200个。原创 2024-05-09 13:43:39 · 1049 阅读 · 0 评论 -
[华为OD]C卷 BFS 亲子游戏 200
这题里面因为有糖果数目,所以这边采用的方法是,如果下一步能走到终点,那么终点位置的visit[endx][endy]不设置为1.这样其他方案走到终点的话,也能加入进队列里面。但是由于队列里面取首元素是终点的话,那么就不会往下找了,所以,搜索记录的应该也都是比较短的路线。宝宝和妈妈参加亲子游戏,在一个二维矩阵(N*N)的格子地图上,宝宝和妈妈抽签决定各自。游戏规则Q是妈妈必须在最短的时间(每个单位时间只能走一步)到达宝宝的位置,路上的。的位置,地图上每个格子有不同的Q糖果数量,部分格子有障碍物。原创 2024-05-08 18:57:45 · 695 阅读 · 0 评论 -
[华为OD] C卷 dfs 特殊加密算法 100
所有搜索的时候顺序应该是左->上->下->右(因为排列是先x坐标后y坐标),这样找到第一个符合条件的数据就是最小的密文。如明文第位Data[i]对应密码本单元格为Book[x][y],则明文第i位对应的密文为XY, X和。3•需要按明文串的数字顺序在密码本里找到同样的数字串,密码本里的数字串是由相邻的单元。有一种特殊的加密算法,明文为一段数字串,经过密码本查找转换,生成另一段密文数字串。格数字组成,上下和左右是相邻的,注意:对角线不相邻,同一个单元格的数字不能重复使。如果有多条密文,返回字符序最小的密文。原创 2024-05-08 15:17:02 · 533 阅读 · 0 评论 -
[华为OD]C卷 运输时间 200 动态规划
第i辆车 判断能追上,那么s/v[i] + 1< dp[i-1] ,因为第i辆车与前一辆车行驶时间差距1小时,所以有个-1,也就是前车耗时比后车多一个小时。由于题目说了,速度快的车追上前车,会在追上前车时候按照前车速度继续行驶,那么这个时候,这个速度快的车就会和前车同时到达终点。每辆车固定间隔1小时出发,比如第一辆车0时出发,第二辆车1时出发,依次类推.2辆车,距离11, 0时出发的车速度快,1时出发的车,达到目的地花费5.5。后,只能以前车的速度继续行驶,求最后一车辆到达目的地花费的时间。原创 2024-05-08 11:42:51 · 564 阅读 · 0 评论 -
[华为OD]C卷 精准核算检测 100
建立一个Map<Integer, List<Integer>> patientsContact,存储的是对应的人员编号和他接触人的编号。另一个就是建立初始化为0的数组visited[],数组大小和总人数一致,里面visited[i],就表示编号为第i+1的人员对应的接触人员是否已经检查过了,检查过了那么visited[i]=1. 而递归的终点就是result里面的所有数,都检查过了。编号为1、2号的人员为确诊病例1号与0号有接触,0号与3号有接触,2号54号有接触。输出需要做核酸检测的人数。原创 2024-05-07 18:02:11 · 604 阅读 · 0 评论 -
[华为OD] C卷 100 橱窗里有一排宝石,不同的宝石对应不同的价格
例如客户最大购买宝石个数为m,购买的宝石编号必须为gems[i],gems[i+1]…之后n行分别表示从第0个到第n-1个宝石的价格,即gems[0]到gems[n-1]的价格,类型为int,橱窗里有一排宝石,不同的宝石对应不同的价格,宝石的价格标记为gems[i] 0原创 2024-05-02 16:39:40 · 484 阅读 · 0 评论 -
[华为OD] 小朋友出操 100
算法复杂度要求不高于nlog( n);学号为整数类型,队列规模< 10000;题目比较简单,但是算法复杂度要求不高于nlog(n),那么就直接用二分法就可以了。第一行:输入已排成队列的小朋友的学号(正整数),以","隔开.小明来迟了,请你给小明出个主意,让他尽快找到他应该排的位置。输出一个数字,代表队列位置(从1开始)小朋友出操,按学号从小到大排成一列;原创 2024-05-01 14:26:06 · 254 阅读 · 0 评论 -
[华为OD]C卷 机场航班调度 ,XX市机场停放了多架飞机,每架飞机都有自己的航班号100
明显的自定义排序,也就是把字符串前两个单独比较,后面的再比较,所以可以自定义对象,把字符串前两个和后续拆开进行比较。这个题目中前面缩写排序,和实际字符对应的ascii码排序是一致的,所以可以直接用字符串比较就可以了(如果不一致的话,就需要自己来写比较方案了,那样的话可以定义一个hashMap来弄也可以)进行排序,同一航空公司的航班再按照航班号的后4个数字进行排序最终获得安排好的航班的。输入目前停留在该机场的航班号,输出为按照调度排序后输出的有序的航班号。序按照从特殊符号$ & *,0~9,A~Z排序;原创 2024-05-01 14:02:38 · 1013 阅读 · 0 评论 -
[华为od]C 卷 园区某部门举办了Family Day,邀请员工及其家属参加
那么初始值第一行dp[0][j] ,中间只要没有一个1,那么dp[0][j]=1,有一个1,那么这个位置,和后面位置dp[0][j]=0;家属参观园区时,只能向右和向下园区前进,求从起始。如果不为1,那么dp[i][j] = dp[i-1][j]+dp[i][j-1];那么对于dp[i][j]。如果这个地方位置为1,那么dp[i][j]=0。后面每一行表示该园区是否可以参观,0表示可以参观,1表示不能参观。dp[i][j] 就表示到第i行j列位置的路径数量。最终输出dp[m-1][n-1]就是最终值了。原创 2024-04-30 19:39:51 · 249 阅读 · 0 评论 -
[华为OD] C卷 货运 老李是货运公司承运人,老李的货车额定载货重量为Wt 100
wa,单件运费利为pa,货物B单件重量为wb,单件运费利润为pb•老李每次发车时载货总。重量刚好为货车额定的载货重量wt,车上必须同时有货物A和货物B,货物A、B不可切割。第三列输入为货车的额定载重wt, 0 < wt < 100000。第五列输入为货物B的单件运费利润pb, 0 < pb< 1000。第一列输入为货物A的单件重量wa, 0 < wa< 10000。第二列输入为货物B的单件重量wb, 0< wb < 10000。第四列输入为货物A的单件运费利pa, 0<pa< 1000。原创 2024-04-30 18:28:29 · 182 阅读 · 0 评论 -
[华为OD] C卷 服务器cpu交换 现有两组服务器QA和B,每组有多个算力不同的CPU 100
算出A,B两组性能差距sum(A)-sum(B),然后按A,B循环遍历,找到cpuB-cpuA = (sum(A)-sum(B))/2的两个cpu,值输出就可以了。求两组服务器中,用于交换的CPU的算力,并且要求从A组服务器中选出的CPU,算力尽可能。对于每组测试数据,输出两个整数,以空格分隔,依次表示A组选出的CPU算力,B组选出的。从A组中选出算力为1的CPU,与B组中算力为2的进行交换,使两组服务器的算力都等于3.第二行输入为A组服务器中各个CPU的算力值,以空格分隔。原创 2024-04-30 18:03:33 · 543 阅读 · 0 评论 -
[华为OD] C卷 5G网络 现需要在某城市进行5G网络建设,已经选取N个地点设置5G基站 200
这个题目里面还要算最小的联通网络成本,所以我们要构建一个网络,这个数据里面先按照联通成本进行排序,然后轮询,计算两个节点是否在同一个网络,在的话,就不管,不在的话,那么成本就加上,然后并查集中两个节点进行连接。< Y < = N且X不等于丫,Z表示在X Y之间架设光纤的成本,其中0 < Z < 1 0 0 , P表示是否。第三行开始连续输入M行数据,格式为X Y Z P ,其中X Y表示基站的编号,0 < X < =?注意,基站的联通具有传递性,即基站A与基站B架设了光纤,基站B与基站C也架设了光。原创 2024-04-30 17:24:58 · 771 阅读 · 0 评论 -
[华为OD]C卷 找座位,在一个大型体育场内举办了一场大型活动,由于疫情防控的需要 100
这个可以将字符串变为char型数组,然后判断条件就是在中间位置的时候 第i-1位,i位,i+1位都是0,然后将第i位变成1继续判断。一个数组,用来标识某一排座位Q中,每个座位是否已经坐人。其中两个边界的特殊情况,开始1,2位都是0,那么这种情况可以直接将第一个变为1。另外就是倒数第3位是1,但倒数第2,1位是0,可以将最后一个变为1.算出,在不移动现有观众座位的情况下,最多还能坐下多少名观众。整数,在不移动现有观众座位的情况下,最多还能坐下多少名观众。输入输出示例仅供调试,后台判题数据一般不包含示例。原创 2024-04-29 21:35:34 · 880 阅读 · 0 评论 -
[华为OD]C卷 给定一个数组,数组中的每个元素代表该位置的海拔高度 山脉的个数 200
题目不难,就是数组轮询判断就可以了,一个是注意两个边界判断,另一个就是判断山峰值需要>=1。给定一个数组,数组中的每个元素代表该位置的海拔高度。0表示平地,>=1时表示属于某个。山峰,山峰的定义为当某个位置的左右海拔均小于自己的海拔时,该位置为山峰。置计算时可只满足一边的条件。输出符合条件的山峰的个数。原创 2024-04-29 17:10:30 · 213 阅读 · 0 评论 -
[华为OD]给定一个 N*M 矩阵,请先找出 M 个该矩阵中每列元素的最大值 100
比较暴利的思路就是,直接创建二维数组,然后先按照列遍历找出最大的值放在一个List里面,最后找到这个List最小值就可以了。给定一个 N*M 矩阵,请先找出 M 个该矩阵中每列元素的最大值,然后输出这 M 个值中的。N 和 M 的取值范围均为:[0, 100]第一列元素为:1 和 3,最大值为 3;第二列元素为:2 和 4,最大值为 4。各列最大值 3 和 4 的最小值为 3。原创 2024-04-28 16:57:35 · 773 阅读 · 0 评论 -
[华为OD] 给航天器一侧加装长方形或正方形的太阳能板 100
假设取横坐标是i,j的两个支柱,对应的竖条长度就是a[i],a[j],那么面积就是(j-i)*Math.min(a[i],a[j])补充说明:10 米高支柱和 5 米高支柱之间宽度为 5,高度取小的支柱高也是 5,面积为 25。注:支柱至少有 2 根,最多 10000 根,能支持的高度范围 1~10^9 的整数。柱(图中的黑色竖条),再在支柱的中间部分固定太阳能板。可以支持的最大太阳能板面积:(10 米高支柱和 5 米高支柱之间)不同,太阳能板的安装面积受限于最短一侧的那根支柱长度。原创 2024-04-26 20:52:43 · 767 阅读 · 0 评论 -
[华为OD]输入一个单词前缀和一个字典 100
输入一个单词前缀和一个字典,输出包含该前缀的单词。所有包含该前缀的单词,多个单词换行输出。单词前缀+字典长度+字典。字典是一个有序单词数组。原创 2024-04-26 18:27:45 · 194 阅读 · 0 评论 -
[华为OD]幼儿园两个班的小朋友 100
这个比较简单,建立两个动态数组表示1班和2班,然后在判断的时候,用一个bool值isClassOne表示当前指定的是1班,除了第一个小朋友默认为第一班以外,其余小朋友数据根据,Y,N值来变动,是Y的话,并且isClassOne = true的话,那么就是这个就是1班的,否则就是2班的,同时isClassOne翻转变为false,表示当前指定为2班。比如:6/N 2/Y 3/N 4/Y,表示共 4 位小朋友,2 和 6 同班,3 和 2 不同班,4 和 3 同班。所以 1、2 同班,3、4 同班,输出为。原创 2024-04-26 17:42:28 · 314 阅读 · 0 评论 -
[华为OD]实现一个支持优先级的队列,高优先级先出队列 100
然后重写equals方法,采用set集合去重和compareTo 排序方法,再排序输入在list中,输出需要的值就可以了。数据 40 的优先级最高,所以最先输出,其次是 30;数据 40 的优先级最高,所以最先输出,其次是 30;输入样例中,向队列写入了 4 个数据,每个数据由数据内容和优先级组成。输入样例中,向队列写入了 4 个数据,每个数据由数据内容和优先级组成。需要构造对象,对象里面三个元素,输入数据,优先级,和输入位置。如果两个输入数据和优先级都相同,则后一个数据不入队列被丢弃。原创 2024-04-26 16:59:40 · 359 阅读 · 0 评论 -
[华为od]给你一串未加密的字符串 str 100
这个不难,主要是注意需要构建一个字符和偏移量数字的对应Map关系。第一行为一个整数 n(1<=n<=1000),表示有 n 组测试数据,每组数据包含一行,原文 str。给你一串未加密的字符串 str,通过对字符串的每一个字母进行改变来实现加密,加密方式。例如:原文 abcde 加密后 bdgkr,其中偏移量分别是 1,2,4,7,13。当 i>=3 时,数组元素 a[i]=a[i-1]+a[i-2]+a[i-3],时间限制:2000ms,内存限制:64MB。每组测试数据输出一行,表示字符串的密文。原创 2024-04-26 15:32:48 · 253 阅读 · 0 评论