V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
magic3584
V2EX  ›  职场话题

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

  •  
  •   magic3584 · 2023-08-16 15:39:50 +08:00 · 4051 次点击
    这是一个创建于 474 天前的主题,其中的信息可能已经有所发展或是发生改变。

    华为 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 推荐分,惜败(当然我菜是原罪,尤其第二题竟然没完成?!)。

    继续找工作中。。。

    36 条回复    2023-08-25 22:37:39 +08:00
    liprais
        1
    liprais  
       2023-08-16 15:43:55 +08:00
    一道也没看懂,华为果然是华为
    magic3584
        2
    magic3584  
    OP
       2023-08-16 15:46:46 +08:00
    @liprais #1
    没看懂是我描述不清楚了,抱歉。毕竟是按印象大概复述的。
    真题的话就第三题 “小朋友玩摇摇车可以用 1233 表示”这块我想了一会,但是看到例子就清楚了。
    CutetterssLe
        3
    CutetterssLe  
       2023-08-16 15:51:09 +08:00
    OD 都考算法了,真卷
    liprais
        4
    liprais  
       2023-08-16 15:51:12 +08:00   ❤️ 1
    @magic3584 华为嘛,以前还问我不想面试他们的职位是不是对华为有偏见,他们就这德性,简单的事情复杂化还自以为是
    victimsss
        5
    victimsss  
       2023-08-16 15:53:39 +08:00
    @CutetterssLe 一直有机试吧
    7911364440
        6
    7911364440  
       2023-08-16 15:53:40 +08:00
    第三题没看明白 有人解释下吗,112233 为啥表示不开心为 0 啊
    magic3584
        7
    magic3584  
    OP
       2023-08-16 15:54:46 +08:00
    @7911364440 #6
    就是 1 辆摇摇车,3 个小朋友都是玩完走了,所以不开心为 0
    zhq566
        8
    zhq566  
       2023-08-16 15:55:52 +08:00
    今年朋友前端找工作都问算法了。
    magic3584
        9
    magic3584  
    OP
       2023-08-16 15:55:58 +08:00
    @CutetterssLe #3
    给了题库大概 100+道,我用 chatGPT 刷了 3 天刷了 1/3 不想刷就直接考了,毕竟 300 分觉得自己做不到。。。
    xiaochun41
        10
    xiaochun41  
       2023-08-16 15:57:44 +08:00
    看不懂题
    davidoff567
        11
    davidoff567  
       2023-08-16 16:03:19 +08:00
    这。。20-25K 的难度?
    victimsss
        12
    victimsss  
       2023-08-16 16:03:37 +08:00
    第三题啥寄吧题目整得这么绕,简单理解就算数字代表编号,第一次出现是来,第二次出现是走。比如 1 2 1 2 ,1 来,2 来,但是 1 还没走,然后 1 走,1 走完之后 2 就可以玩,然后 2 走。
    magic3584
        13
    magic3584  
    OP
       2023-08-16 16:04:41 +08:00
    @davidoff567 #11
    JD 为 15-30K
    leewangyang
        14
    leewangyang  
       2023-08-16 16:05:35 +08:00 via iPhone   ❤️ 1
    第一题,如果两层循环外层是 A 内层是 B 的,如果 B 的 index 不会重置,而是单调增。可以 O(B),再好一点就是 B 可以用二分查找去找。在 B 远大于 A 的时候,更优。
    第二题,直接用个 map 存这个数字上一次出现位置,然后遍历依次加进去,如果出现重复,判断是不是小于距离,是就结束,不是就覆盖。用 hash 的 map ,一遍走完出结果。O(n)
    第三题应该是第一个数字表示排队,第二个表示离开吧,按 op 说可以用 set 吧,进 set 和出 set 的时候任意时候 set 里面数量小于车数就是坐上了。
    magic3584
        15
    magic3584  
    OP
       2023-08-16 16:06:24 +08:00
    @victimsss #12
    我专门标注了 “小朋友玩摇摇车可以用 1233 表示(题目就这么描述的)”。看第一遍也不懂,看例子就懂了。
    justfindu
        16
    justfindu  
       2023-08-16 16:13:01 +08:00
    第三题没看懂
    magic3584
        17
    magic3584  
    OP
       2023-08-16 16:13:53 +08:00 via iPhone
    @leewangyang #14
    感谢大佬第二题的新解法
    leewangyang
        18
    leewangyang  
       2023-08-16 16:21:40 +08:00
    @magic3584 可能三没说对。一个 set 应该不好解决,应该像你说的用两个 set 。不过大致的想法类似模拟进出操作,然后检查条件
    MuSeCanYang
        19
    MuSeCanYang  
       2023-08-16 16:22:26 +08:00
    @magic3584 #13
    15K 要求这么高????
    me1onsoda
        20
    me1onsoda  
       2023-08-16 16:36:21 +08:00
    又不限制复杂度,第二题再申请个数组感觉简单很多
    me1onsoda
        21
    me1onsoda  
       2023-08-16 16:37:40 +08:00
    122313 我还以为是玩的顺序
    sobev
        22
    sobev  
       2023-08-16 16:46:21 +08:00
    第一题是这个意思吗
    ![]( )
    sobev
        23
    sobev  
       2023-08-16 16:57:18 +08:00
    ![]( )
    chendl111
        24
    chendl111  
       2023-08-16 16:57:37 +08:00   ❤️ 1
    这三道题是 leetcode 简单题难度
    1.双指针,复杂度 O(n+m)
    2.扫一遍记录最短距离,贪心,复杂度 O(n)
    3.用 stack 记录出栈时的大小,复杂度 O(n)
    chendl111
        25
    chendl111  
       2023-08-16 16:59:59 +08:00
    @chendl111 第三题应该是 queue+打标记判断下就行了
    xuelulu
        26
    xuelulu  
       2023-08-16 17:01:52 +08:00
    刚做,320 ,结果挂在性格测试,被测出来太 emo/忧郁
    fridaycatye
        27
    fridaycatye  
       2023-08-16 17:17:09 +08:00
    @xuelulu #26 不去也罢
    tsp1970
        28
    tsp1970  
       2023-08-16 17:37:35 +08:00
    @xuelulu 啊这 忧郁可以测出来的哇
    nyxsonsleep
        29
    nyxsonsleep  
       2023-08-16 17:50:18 +08:00
    OD 的 JD 薪资可以无视,纯看后面技术面试和你的工作时间计算综合定级。
    目标院校 150+,非目标院校 350+。考题分数纯看通过题目数量,这个应该是常识吧,你的联络人没告诉你吗?
    至于题目和什么步骤,估计都没人看那些东西,每个人都很忙,尤其技术部门的,这个不算绩效和时长,谁会去看呢。
    luvxy
        30
    luvxy  
       2023-08-16 17:50:49 +08:00
    @fridaycatye 怕你受不了他们的狼性文化是吧,哈哈
    RealJacob
        31
    RealJacob  
       2023-08-16 17:57:43 +08:00
    @zhq566 这。。。稍微大点的公司五年内都问算法吧
    iOCZ
        32
    iOCZ  
       2023-08-16 17:59:42 +08:00
    第一题应该记录两个下标就行了吧
    nyxsonsleep
        33
    nyxsonsleep  
       2023-08-16 18:00:44 +08:00
    至于题目难度,这个是纯随机的,我看你这几题都偏简单的样子,虽然描述比较绕,但也不清楚是不是你回忆有问题还是示例不完整。。
    polobug
        34
    polobug  
       2023-08-18 09:22:51 +08:00
    华为 jd 公积金按照多少交?比例多少哦
    magic3584
        35
    magic3584  
    OP
       2023-08-18 13:35:12 +08:00
    @polobug #34
    不清楚啊,我这第一关就挂了
    acvvkhalil
        36
    acvvkhalil  
       2023-08-25 22:37:39 +08:00
    无所谓的,我机考满分性格测试挂了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5799 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 57ms · UTC 03:19 · PVG 11:19 · LAX 19:19 · JFK 22:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.