![](https://img-blog.csdnimg.cn/a0baf34ab018403881465fca313f9cf8.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java | 华为OD机试AB卷
文章平均质量分 68
本专栏内容转载自“伏城之外”的同名专栏,已获得“伏城之外“的授权。但是本专栏只有Java语言实现,因此价格更优惠,适合熟悉Java语言的考友。
优惠券已抵扣
余额抵扣
还需支付
¥49.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
程序员阿甘
好好学习,天天敲代码
展开
-
华为OD机试(A&B卷)真题目录(Java)
2023A+B真题目录,Java语言实现原创 2023-07-20 13:03:32 · 1780 阅读 · 0 评论 -
华为OD机试 - 二维伞的雨滴效应(Java)
之后,我们可以继续按上面逻辑递归的判断:根的左子树[satrt + 1, i - 1]、根的右子树[i, end],他们对应索引范围的子序列,是否满足二叉搜索树前序遍历的特点(根节点的值 大于 其左子树的所有节点的值、根节点的值 小于 其右子树的所有节点的值)因此,我们从start+1位置开始判断,如果satrt+1位置的元素值 < 根节点的元素值(start位置),那么start+1位置的元素就是根节点的左子树节点,按此逻辑,依次往后判断。按照上面逻辑,我们可以得到根节点、根的左子树、根的右子树。原创 2023-10-20 23:38:31 · 78 阅读 · 0 评论 -
华为OD机试 - 荒岛求生(Java)
如果左边出来的是正数,则由于正数不能从左边逃生,而只能从右边出口逃生,因此我们不能算该正数逃生成功,并且该正数还会成为左边出来的负数的逃生阻力,因此我们将左边出来的正数缓存进栈中。正负表示逃生方向(正表示向右逃生,负表示向左逃生),绝对值表示战斗力,越左边的数字表示里左边港口越近,逃生方向相同的人永远不会发生决斗。按此逻辑,最后栈的大小其实就是逃生成功的正数个数postive,我们只要求和negative+postive即为题解。若两个人相遇,则进行决斗,战斗力强的能够活下来,并损失掉与对方相同的战斗力;原创 2023-10-20 23:37:44 · 74 阅读 · 0 评论 -
华为OD机试 - 编码能力提升计划(Java)
这里,可能有人会有疑问,我们如果看time[5]答案,那么总耗时17 - 4 = 13,也可以不超时呀。为了提升软件编码能力,小王制定了刷题计划,他选了题库中的n道题,编号从0到n-1,并计划在m天内按照题目编号顺序刷完所有的题目(注意,小王不能用多天完成同一题)。很简单,我们应该将这次宝贵的机会用在看耗时最长的题目上,而这些题目中耗时最长的是time[4],因此我们看time[4]题目的答案,总耗时17 - 5 = 12。另外,在每天花费T时间做题的情况下,要在m天中做完所有题目。原创 2023-10-20 23:36:58 · 117 阅读 · 0 评论 -
华为OD机试 - 采样过滤(Java)
丢弃S[4]到S[6]的值。有两段正常连续周期,S[0]到S[3](周期数为4)和S[7]到S[11](周期数为5)。从S[5]到S[9]的5个周期内有三个错误值S[5]、S[8]和S[9],工具故障。S[4]和S[7]不满足故障条件,此值分别由S[3]和S[6]代替,即S[4]为3,S[7]为13。s[4]是故障开始点,而当前用例P=3,那么s[5]~s[7]应该是故障恢复检查时期,从S[3]到S[7]的5个周期内只有两个错误值S[3]和S[5]。S[0],S[4],S[7],S[8]为错误值。原创 2023-10-20 23:35:45 · 54 阅读 · 0 评论 -
华为OD机试 - 人气最高的店铺(Java)
如果选择发放 10元+20元+30元=60元 的补贴来抢2,3.4号店铺的票,总共发放了60元补贴(5号店铺有2票,1号店铺要3票才能胜出)如果选择发放 10元+20元+30元=60元 的补贴来抢2,3,4号店铺的票,总共发放了60元补贴(5号店铺有2票,1号店铺要3票才能胜出)如果选择发放 10元+40元=50元 的补贴来抢2,5号店铺的票,总共发放了50元补贴(抢了5号店铺的票后,现在1号店铺只要2票就能胜出)的换皮题,具体解析请看该博客的。有5个人参与,共5个店铺。有5个人参与,共5个店铺。原创 2023-08-20 21:25:00 · 282 阅读 · 0 评论 -
华为OD机试 - 字符串划分(Java)
本题数量级不大,可以考虑暴力求解。即定义两个指针i, j,去模拟两个分割点,其中 i < j,且 j - i > 1,因为被分割的子串至少有1个字母。给定一个小写字母组成的字符串 s,请找出字符串中两个不同位置的字符作为分割点,使得字符串分成三个连续子串且子串权重相等,注意子串不包含分割点。若能找到满足条件的两个分割点,请输出这两个分割点在字符串中的位置下标,若不能找到满足条件的分割点请返回0,0。另外,为了避免重复求解某范围内的子串权重,我们可以使用前缀和,实现O(1)时间计算出任意区间内的子串权重。原创 2023-08-20 21:24:06 · 200 阅读 · 0 评论 -
华为OD机试 - 排队游戏(Java)
但是,pricks 中是有可能存在多个相同能力值的,对于这种情况,我们应该将ability插入到pricks中和ability相同的最后一个能力值的后面,这样才能保证 ability 被插入后,其后面值都比 ability 高。对于非刺头同学,如果发现他前面有能力值比自己高的同学,他不满程度就增加,增加的数量等于前面能力值比他大的同学的个数。因此,每个非刺头学生,其实只需要关注他前面的刺头学生即可,因为他前面的非刺头学生的能力值一定不大于他。我们可以定义一个集合 pricks 来记录刺头学生的能力值。原创 2023-08-20 21:23:16 · 469 阅读 · 0 评论 -
华为OD机试 - 购物(Java)
当两个方案选择的商品集合至少有一件不同,视为不同方案,因此可能存在两个方案花费相同。按花费从小到大的顺序依次输出K行,一行一个整数。表示花费前K小的购买方案的花费。一个购买方案可以是从N件商品种选择任意件进行购买(至少一件),花费即价格之和。商店里有N件唯一性商品,每件商品有一个价格,第 i 件商品的价格是 ai。本题其实就是要我们求解:全组合中前k小组合(按照组合之和大小排序)。现在你需要求出所有购买方案中花费前K小的方案,输出这些方案的花费。原创 2023-07-29 21:50:13 · 357 阅读 · 0 评论 -
华为OD机试 - 最佳的出牌方法(Java)
一轮我们应该只能找出一个最大升值的顺子,当一轮找结束后,剔除掉card_count中该顺子占用的牌数了,剩余牌有可能还会产生顺子,因此还要继续下一轮找顺子。我们可以定义一个长度为5的滑窗,其左边界为L,右边界为L+4,只要滑窗内每张牌的card_count都大于0,即L~L+4可以产生一个顺子。按照前面升值、贬值逻辑,计算出顺子是升值还是贬值,如果是贬值,则不应该L~L+4不应该产生顺子,否则可以产生顺子。按照上面逻辑,我们就可以得出连续五张牌是作为顺子划算,还是不组成顺子划算。原创 2023-07-29 21:49:14 · 229 阅读 · 0 评论 -
华为OD机试 - 周末爬山(Java)
初始时,小明位于(0, 0)位置,此时走的步数step = 0,假设地图为matrix,则到高度matrix[0][0]的最短步数为step=0,记录为 minStepToHeight[ matirx[0][0] ] = 0。因此,可得最大山峰高度原创 2023-07-29 21:47:53 · 212 阅读 · 0 评论 -
华为OD机试 - 最多几个直角三角形(Java)
然后,继续遍历下一个可能直角三角形组合3 4 5,发现统计的3的数量已经为0了,因此这个三角形无法组合,继续遍历下一个可能直角三角形组合 5 12 13,然后统计数量变为。比如,我们已经用了3 4 5组成一个直角三角形,那么给的线段还剩下6 5 12 13,而剩下的线段中,只能组合出一个直角三角形5 12 13。现在要求的是,以给的的线段,能组合出来的最多直角三角形数量。继续遍历,发现没有下一个可能的组合了,因此,计算出该种情况可以得到2个直角三角形组合:3 4 5以及5 12 13。原创 2023-07-22 14:21:24 · 79 阅读 · 0 评论 -
华为OD机试 - 幻方修复(Java)
当我们知道幻和后,就可以很轻易找出发生交换的两个点所在的行列,比如用例1中,我们遍历所有行、所有列后,可以得出不正确的行、列(即行和或列和不等于幻和的行、列)本题如果硬解的话,则逻辑上很简单,即:暴力枚举出所有的两点组合,并尝试交换,验证交换后的幻方的各行、各列、各对角线的和是否相等,若相等即找到了交换的两个点。幻方(Magic Square)是一个由1~N²,共N²个整数构成的N*N矩阵,满足每行、列和对角线上的数字和相等。当然,我们还需要考虑一种特殊情况,比如下面图示中,发生交换的两个点处于同一行中,原创 2023-07-22 14:21:42 · 98 阅读 · 0 评论 -
华为OD机试 - 猜数字(Java)
我们假设某个谜底 和 输入的猜测数字 产生的猜测提示是real_result,而输入中猜测数字对应的猜测提示是expect_result,如果real_result == expect_result,那么说明说明当前谜底符合当前猜测数字的要求。如果,暴力枚举出来的所有谜底中,只有一个可用谜底,那么该谜底就是题解。即:真正的谜底,第一位不可能是5,第二位不可能是7,第三位不可能是1,第四位不可能是6。这行的含义其实是:真正的谜底的四个数字不能取4,9,0,1这些。一个人设定一组四码的数字作为谜底,另一方猜。原创 2023-07-22 14:21:51 · 76 阅读 · 0 评论 -
华为OD机试 - 称砝码(Java)
有N种物品,每种物品只有一个,第 i 个物品的重量为 wi,价值为pi,另外还有一个承重为W的背包,问该背包在不超载的情况下,装入物品的最大价值是多少?有N种物品,第 i 个物品的重量为 wi,价值为pi,数量为ci,另外还有一个承重为W的背包,问该背包在不超载的情况下,装入物品的最大价值是多少?学会01背包后,多重背包问题的求解就非常简单了,其实我们可以将多重背包问题,转化为01背包问题,怎么转化呢?而这其实刚好和求解背包问题时,遍历所有可能的背包承重相符,因此本题非常适合当成背包问题求解。原创 2023-07-22 14:21:59 · 126 阅读 · 0 评论 -
华为OD机试 - 插队(Java)
某银行将客户分为了若干个优先级, 1 级最高, 5 级最低,当你需要在银行办理业务时,优先级高的人随时可以插队到优先级低的人的前面。当字符为 a 时,后面会有两个的正整数 num 和 x ,表示到来的客户编号为 num ,优先级为 x;输出包含若干行,对于每个 p , 输出一行,仅包含一个正整数 num , 表示办理业务的客户编号。现在给出一个人员到来和银行办理业务的时间序列,请你在每次银行办理业务时输出客户的编号。当字符为 p 时,表示当前优先级最高的客户去办理业务。简单的优先队列应用。原创 2023-07-22 14:22:07 · 93 阅读 · 0 评论 -
华为OD机试 - 最快到达医院的方法(Java)
根据题目意思,去A只能Taxi,去B只能Walk,而对应的距离和速度都给出来了,因此解题逻辑应该没有什么悬念。新型冠状病毒疫情的肆虐,使得家在武汉的大壮不得不思考自己家和附近定点医院的具体情况。分别是到达A医院的距离,到达B医院的距离,计程车平均速度,上车等待时间,步行速度。经过一番调查,大壮明白了距离自己家最近的定点医院有两家。由于武汉封城,公交停运,私家车不能上路,交通十分不便。一行,计程车(Taxi)、步行(Walk)、相等(Same)给出X,Y,M,L,N的数据,请问大壮到达哪家医院最快?原创 2023-07-22 14:22:23 · 68 阅读 · 0 评论 -
华为OD机试 - 创建二叉树(Java)
当我们遍历operations时,operations[i] = [height, index] ,其实就是找 tree[height][index]父节点,在该父节点下插入node(i)子节点,而在该父节点下插入node(i)子节点,其实就是向tree[height+1]数组中加入node(i)节点,比如。上图就是用例1的二叉树,输出时,由于题目说:层序遍历会遍历有值节点的 null 子节点,因此为上面二叉树的有值节点加入null子节点,如下图所示。这个就很简单了,具体实现看代码。原创 2023-07-22 14:22:33 · 81 阅读 · 0 评论 -
华为OD机试 - 工单调度策略(Java)
假设华为和运营商A签订了运维合同,部署了一套调度系统,只有1个外线工程师(FME),每个工单根据问题严重程度会给一个评分,在SLA时间内完成修复的工单,华为获得工单评分对应的积分,超过SLA完成的工单不获得积分,但必须完成该工单。当小区通信设备上报警时,系统会自动生成待处理的工单,华为工单调度系统需要根据不同的策略,调度外线工程师(FME)上站修复工单对应的问题。假设从某个调度时刻开始,当前工单数量为N,不会产生新的工单,每个工单处理修复耗时为1小时,请设计你的调度策略,完成业务目标。原创 2023-07-22 14:22:44 · 143 阅读 · 0 评论 -
华为OD机试 - 几何平均值最大子数组(Java)
比如下面min_pre_fact代表的时0~i-L范围内最小的子数组(注意,是范围内,不一定就是0~i-L),而fact代表的是0~i子数组,然后用fact / min_pre_fact 其实就能得出一个长度大于L的子数组的几何平均值/avg的情况。我想了一下,本题没有什么好的解法,我们只能暴力枚举所有子数组情况,并求出每个子数组的几何平均值,保留最大的,如果存在多个最大几何平均值子数组,那么就保留长度最短的,如果有多个长度相同的,则保留起始索引最靠前的。(K个数的几何平均值为K个数的乘积的K次方根)原创 2023-07-22 14:22:52 · 106 阅读 · 0 评论 -
华为OD机试 - 九宫格(Java)
基于回溯算法的全排列求解是一种暴力解法,即枚举出全部排列情况,因此对大数量级而言,我们应该慎用,但是本题,已经明确指出了求解9个数字的全排列,因此排列情况共有9!B9),从排列的第1个数字开始,遇到Ai<Bi,则排列A<排列B (1<=j<=9)。现在有一种新的玩法,给九个不同的数字,将这九个数字放在3×3的格子中,要求每行、每列以及两个对角线上的三数之积相等(三阶积幻方)。排列后的九个数宇中:第1-3个数字为方格的第一行,第4-6个数宇为方格的第二行,第7-9个数字为方格的第三行。0<数字<10^7。原创 2023-07-22 14:23:01 · 102 阅读 · 0 评论 -
华为OD机试 - 硬件产品销售方案(Java)
某公司目前推出了AI开发者套件,AI加速卡,AI加速模块,AI服务器,智能边缘多种硬件产品,每种产品包含若干个型号。输入包含采购金额amount和产品价格列表price。种产品,每种产品的库存量充足,给定每种产品的价格,记为price(不存在价格相同的产品型号)。请为合作厂商列出所有可能的产品组合。元的硬件产品搭建自己的AI基座。简单的可重复元素组合求解。现某合作厂商要采购金额为。原创 2023-07-22 14:23:08 · 98 阅读 · 0 评论 -
华为OD机试 - 组装新的数组(Java)
我们可以使用回溯算法来在N中选取多个元素(同一个元素可以重复选取),这个逻辑其实就是求可重复元素组合情况,每得到一个组合就看其和sum是否等于m,或者m - sum 是否已经小于 N.min,若是,则该组合是符合要求的,count++,否则不符合要求,继续找。当sum > m时,则说明往后的组合已经无法符合要求,此时需要进行回溯了。在数组N任意选取多个元素,且同一个元素可以重复选取,只要最终选取的所有元素之和等于m,或者:小于m但是差值不超过N.min()。第一行输入是连续数组N,采用空格分隔。原创 2023-07-22 14:23:17 · 72 阅读 · 0 评论 -
华为OD机试 - 农场施肥(Java)
但是,本题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-07-22 14:23:29 · 69 阅读 · 0 评论 -
华为OD机试 - 快速开租建站(Java)
接下来 relationsNum 行,每行包含两个id,描述一个依赖关系,格式为:IDi IDj,表示部署任务i部署完成了,部署任务j才能部署,IDi 和 IDj 值的范围为:[0, taskNum)我们可以先同时部署任务项0和任务项1,然后部署任务项2,最后同时部署任务型3和任务型4.最短开战时间为3。我们可以先同时部署任务型0,任务型1,任务项2。给定一个站点部署任务项和它们之间的依赖关系,请给出一个站点的最短开站时间。没有依赖的任务可以并行部署,优秀的员工们会做到完全并行无等待的部署。原创 2023-07-22 14:23:38 · 133 阅读 · 0 评论 -
华为OD机试 - 查找充电设备组合(Java)
某个充电站,可提供n个充电设备,每个充电设备均有对应的输出功率。任意个充电设备组合的输出功率总和,均构成功率集合P的1个元素。功率集合P的最优元素,表示最接近充电站最大输出功率p_max的元素。第2行每个充电设备的输出功率 可以当成 不同物品的重量以及价值,即重量=价值。第3行充电站最大输出功率p_max 可以当成 背包承重。现在要求:背包承重下能装入的最大价值。本题可以当成01背包问题处理。关于01背包问题,大家可以看。功率集合P的最优元素。原创 2023-07-22 14:23:47 · 112 阅读 · 0 评论 -
华为OD机试 - 荒地(Java)
其中不能建设的区域发电量为0kw,可以发电的区域根据光照,地形等给出了每平方公里年发电量x千瓦。第一行输入为调研的地区长,宽,以及准备建设的电站【长宽相等,为正方形】的边长最低要求的发电量。如果含义是不能建设发电站,那意思应该是,正方形发电站区域如果含0的话,则不能建设发电站。调研的区域大小为长2宽5的矩形,我们要建设的电站的边长为2,建设电站最低发电量为6.祖国西北部有一片大片荒地,其中零星的分布着一些湖泊,保护区,矿区;我们希望能够找到其中集中的矩形区域建设电站,能够获得良好的收益。原创 2023-07-22 14:23:55 · 89 阅读 · 0 评论 -
华为OD机试 - 上班之路(Java)
输入的第一行为两个整数t,c(0 ≤ t,c ≤ 100),t代表可以拐弯的次数,c代表可以清除的路障个数。如果深度优先搜索的下一步的代价是ut > t,或者uc > c,则说明下一步无法继续走了。输入的第二行为两个整数n,m(1 ≤ n,m ≤ 100),代表地图的大小。生活在美丽的蓝鲸城,大马路都是方方正正,但是每天马路的封闭情况都不一样。输出是否可以从家里出发到达公司,是则输出YES,不能则输出NO。2、支持破壁,即清除障碍,但是最多只能破壁c次数。可以清除给定个数的路障,现在你的任务是计算。原创 2023-07-20 13:04:20 · 148 阅读 · 0 评论 -
华为OD机试 - 最多等和不相交连续子序列(Java)
第一步,我们可以用动态规划前缀和的思路求出任意区间的连续子序列的和,具体请看下面博客中:一维数组前缀和的应用。给定一个数组,我们称其中连续的元素为连续子序列,称这些元素的和为连续子序列的和。数组中可能存在几组连续子序列,组内的连续子序列互不相交且有相同的和。2、求解每个“和” 下的最大不相交区间数量,保留最大数量作为题解。这样最后得到的不相交区间数量count,就是最大不相交区间数量。第一行是一个整数M,表示满足要求的最多的组内子序列的数目。1、将和相同的连续子序列的区间统计在一起。原创 2023-07-20 13:10:47 · 107 阅读 · 0 评论 -
华为OD机试 - 去除多余空格(Java)
之后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-07-20 13:10:56 · 79 阅读 · 0 评论 -
华为OD机试 - 优雅子数组(Java)
利用双指针(即一个双重for)找到所有子数组(有点暴力),外层 i 指针指向子数组左边界,内层 j 指针指向子数组右边界,然后统计子数组内部各数字出现个数,若有数字出现次数大于等于k,则该子数组符合要求,统计结果ans++。其实上面逻辑超时的原因很容易发现,就是暴力枚举了所有子数组,因此必须优化子数组获取逻辑,和一位网友讨论后,发现上面逻辑有一个可以优化的点。例如,数组1,2,3,1、2,3,1,它是一个3-优雅数组,因为元素1出现次数大于等于3次,此时其实就遗漏部分符合要求的子数组情况。原创 2023-07-20 13:12:22 · 104 阅读 · 0 评论 -
华为OD机试 - 计算快递主站点(Java)
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-07-22 14:21:34 · 101 阅读 · 0 评论 -
华为OD机试 - 最大数字(Java)
然后对他们进行初始化,初始时unused就是统计输入字符串中各数字字符的出现次数,而reserve每个数字字符的个数都初始化为0。如果此时stack栈顶没有元素,则将遍历的c直接压入栈,然后unused[c]--,reserve[c]++给定一个由纯数字组成以字符串表示的数值,现要求字符串中的每个数字最多只能出现2次,超过的需要进行删除;如”34533″,数字3重复超过2次,需要删除其中一个3,删除第一个3后获得最大数值”4533″。请返回经过删除操作后的最大的数值,以字符串表示。原创 2023-07-21 13:25:16 · 139 阅读 · 0 评论 -
华为OD机试 - 分奖金(Java)
本题最简单的思路是双重for,但是时间复杂度是O(m^2),而m取值1~10000,这个数量级非常有可能超时。按照工号的顺序往后排列,遇到第一个数字比自己数字大的,那么,前面的员工就可以获得“距离*数字差值”的奖金。第2个员工后面没有比他数字更大的员工,第3个员工是最后一个员工,后面也没有比他更大数字的员工,所以他得到的奖金是3。的解题思路,利用栈结构通过O(n)时间,找出数组每一个元素的下一个更大值。那么第2个员工的数字10比第1个员工的数字2大,所以,他获得他分配的随机数数量的奖金,就是10。原创 2023-07-22 14:24:02 · 132 阅读 · 0 评论 -
华为OD机试 - 最差产品奖(Java)
第二行,产品的评分序列,比如[12,3,8,6,5],产品数量N范围是-10000 < N <10000。计算出每一个滑窗的范围,然后每个滑窗都花费O(m)时间去遍历,收集每一个滑窗的最小值。评选的标准是依次找到从当前产品开始前M个产品中最差的产品,请给出最差产品的评分序列。评选的方式是首先对每个产品进行评分,然后根据评分区间计算相邻几个产品中最差的产品。第一行,数字M,表示评分区间的长度,取值范围是0<M<10000。12,3,8 最差的是3。3,8,6 最差的是3。8,6,5 最差的是5。原创 2023-07-22 14:24:10 · 67 阅读 · 0 评论 -
华为OD机试 - 基站维护工程师(Java)
题目中说 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-07-23 16:00:08 · 117 阅读 · 0 评论 -
华为OD机试 - 数字加减游戏(Java)
因此,我们可以让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-07-23 16:00:21 · 74 阅读 · 0 评论 -
华为OD机试 - 字符串解密(Java)
将输入字符串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-07-23 16:00:29 · 95 阅读 · 0 评论 -
华为OD机试 - 简单的解压缩算法(Java)
Java这里最好使用LinkedList模拟栈,但是LinkedList模拟的栈是严格栈,即只能每次弹出栈顶元素,不能一下将某个范围元素全部删除,因此在取出栈中 { 和 } 中间内容时,比JS略显复杂,但是处理逻辑相同。2、花括号中的字符串加数字N,表示花括号中的字符重复N次。例如压缩内容为{AB}3,表示原始字符串为ABABAB。1、字符后面加数字N,表示重复字符N次。另外,发现字符“{”时,需要记录它在stack栈中位置到idxs数组中;现需要实现一种算法,能将一组压缩字符串还原成原始字符串,原创 2023-07-23 16:00:37 · 86 阅读 · 0 评论 -
华为OD机试 - 二进制差异数(Java)
那么差异值就是0110,相似值就是1000,可以发现,A,B最高位的1,在按位异或运算下被换成0,在按位与的运算下,变成了1,因此这种情况下,相似值必然大于差异值,不符合要求。那么差异值就是1100,相似值就是0010,可以发现,A,B的最高位不同,因此按位异或运算下被换成了1,而按位与运算下变成了0,因此这种情况下,差异值必然大于相似值,符合要求。有了以上规律,我们可以统计出,每个数的最高位1处于哪一位,最高位1所处位数相同的数之间无法组合,最高位1所处位数不同的数之间可以组合。假设A=5,B=3;原创 2023-07-23 16:00:46 · 103 阅读 · 0 评论