我抽到的华为 OD 机试算法不难,但是没过,可惜了

2023-08-16 15:39:50 +08:00
 magic3584

华为 OD 机试,4 道算法题,两道 100 分 一道 200 分,时间 150 分钟,按通过测试用例比例给分(但是我以为按步骤给分 Orz )

第一题:

两个从小到大排序的正整数数组 A[] B[],要求输出满足以下条件

  1. A[i] <= B[j]
  2. 只输出满足条件最近的 B[j]
  3. 按照 A 的顺序输出

例如

A:1 ,2 ,3

B:3 ,5 ,6 ,8

要输出

1 ,3

2 ,5

3 ,6

用了双层 for 循环,但是通过测试用例 90%,本题得分 90

第二题

正整数数组 A[],正整数 magicNumber ,要求输出间隔 magicNumber 以内的相同数字的第一个 index ,否则输出 -1

例如

A:3 ,2 ,4 ,3 ,5

当 magicNumber = 3 时输出 0

当 magicNumber = 2 时输出 -1

也是双层循环,但内层我死磕用的 while ,竟然没做出来(太不应该了)。。。鉴于时间不足以及我以为按步骤给分,就直接提交了。本题得分 0

第三题

m 个摇摇车,n 个小朋友分别有编号,小朋友玩摇摇车可以用 1233 表示(题目就这么描述的)。小朋友可以排队等着玩,或者直接离开。但是如果离开的时候没玩过就不开心+1. 要求输出不开心的小朋友个数

例如

1 辆摇摇车,3 个小朋友

当数字为 112233 时,不开心为 0

当数字为 121233 时,2 在等待 1 后也玩上了,所以不开心为 0

当数字为 122313 时,由于 2 没等玩上就离开、3 玩上了( 1 已经玩完了)所以不开心为 1

起初创建了几个 Class 写的时候发现没必要,最后用了两个 Set 解决。本题通过,得分 200

最后得分 90+0+200=290 ,没达到 300 推荐分,惜败(当然我菜是原罪,尤其第二题竟然没完成?!)。

继续找工作中。。。

4046 次点击
所在节点    职场话题
36 条回复
liprais
2023-08-16 15:43:55 +08:00
一道也没看懂,华为果然是华为
magic3584
2023-08-16 15:46:46 +08:00
@liprais #1
没看懂是我描述不清楚了,抱歉。毕竟是按印象大概复述的。
真题的话就第三题 “小朋友玩摇摇车可以用 1233 表示”这块我想了一会,但是看到例子就清楚了。
CutetterssLe
2023-08-16 15:51:09 +08:00
OD 都考算法了,真卷
liprais
2023-08-16 15:51:12 +08:00
@magic3584 华为嘛,以前还问我不想面试他们的职位是不是对华为有偏见,他们就这德性,简单的事情复杂化还自以为是
victimsss
2023-08-16 15:53:39 +08:00
@CutetterssLe 一直有机试吧
7911364440
2023-08-16 15:53:40 +08:00
第三题没看明白 有人解释下吗,112233 为啥表示不开心为 0 啊
magic3584
2023-08-16 15:54:46 +08:00
@7911364440 #6
就是 1 辆摇摇车,3 个小朋友都是玩完走了,所以不开心为 0
zhq566
2023-08-16 15:55:52 +08:00
今年朋友前端找工作都问算法了。
magic3584
2023-08-16 15:55:58 +08:00
@CutetterssLe #3
给了题库大概 100+道,我用 chatGPT 刷了 3 天刷了 1/3 不想刷就直接考了,毕竟 300 分觉得自己做不到。。。
xiaochun41
2023-08-16 15:57:44 +08:00
看不懂题
davidoff567
2023-08-16 16:03:19 +08:00
这。。20-25K 的难度?
victimsss
2023-08-16 16:03:37 +08:00
第三题啥寄吧题目整得这么绕,简单理解就算数字代表编号,第一次出现是来,第二次出现是走。比如 1 2 1 2 ,1 来,2 来,但是 1 还没走,然后 1 走,1 走完之后 2 就可以玩,然后 2 走。
magic3584
2023-08-16 16:04:41 +08:00
@davidoff567 #11
JD 为 15-30K
leewangyang
2023-08-16 16:05:35 +08:00
第一题,如果两层循环外层是 A 内层是 B 的,如果 B 的 index 不会重置,而是单调增。可以 O(B),再好一点就是 B 可以用二分查找去找。在 B 远大于 A 的时候,更优。
第二题,直接用个 map 存这个数字上一次出现位置,然后遍历依次加进去,如果出现重复,判断是不是小于距离,是就结束,不是就覆盖。用 hash 的 map ,一遍走完出结果。O(n)
第三题应该是第一个数字表示排队,第二个表示离开吧,按 op 说可以用 set 吧,进 set 和出 set 的时候任意时候 set 里面数量小于车数就是坐上了。
magic3584
2023-08-16 16:06:24 +08:00
@victimsss #12
我专门标注了 “小朋友玩摇摇车可以用 1233 表示(题目就这么描述的)”。看第一遍也不懂,看例子就懂了。
justfindu
2023-08-16 16:13:01 +08:00
第三题没看懂
magic3584
2023-08-16 16:13:53 +08:00
@leewangyang #14
感谢大佬第二题的新解法
leewangyang
2023-08-16 16:21:40 +08:00
@magic3584 可能三没说对。一个 set 应该不好解决,应该像你说的用两个 set 。不过大致的想法类似模拟进出操作,然后检查条件
MuSeCanYang
2023-08-16 16:22:26 +08:00
@magic3584 #13
15K 要求这么高????
me1onsoda
2023-08-16 16:36:21 +08:00
又不限制复杂度,第二题再申请个数组感觉简单很多

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/965817

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX