zoukankan      html  css  js  c++  java
  • 算法群模拟面试记录

    第一场:2018年12月30日(周日),北京时间早上五点。

    写在最前面:好不容易五点爬了起来围观mock,结果早上周赛睡过去了,唉。orz。

    面试官:wisdompeak,同学:littleRainRain

    第一题:有个花圃矩阵 grid,size 是n * m,花圃上面的一个点,坐标是(x, y)上面可能有花,可能没有花(没有花的话,矩阵上的值为0)。如果一个Q(x,y)上有花的话,grid[x][y] = W, W代表这朵花的香气,随着距离这朵花越来越远,花的香气会逐渐减弱,减弱的关系和两个点的曼哈顿距离成正比,比如在点 P(x1, y1),能闻到在点Q的花的香味是 f = W / (abs(x- x1) + abs(y-y1))。输入一个P点的坐标(px, py),求在这个P点,能闻到花的香味最重的点坐标。

    题解:直接二维矩阵遍历就行。只有一点需要注意的就是曼哈顿距离为0的时候,0不能做除数,怎么处理要问面试官,不要自己yy。

    follow-up,能不能让算法更快一点?(其实我觉得这个问法不是特别的优秀,第一次听到了比较容易懵逼,如果我是面试者的话下面不知道该怎么接。直接问具体条件有什么变化,还是新增了什么条件么)

    我第一次听到follow-up有点懵逼,我还以为难道bfs能解...但是迅速的否认了自己的想法,想象一下如果有个点距离给出的P点非常非常远,但是它的W非常非常大,这个点也有可能是candidate。

    后来面试官解释了一下,假设这个花圃上面就几朵花呢?然后调用query方法N次,如何加速这个算法(言下之意是这个矩阵是一个稀疏矩阵)

    ok,那我们开始预处理下矩阵,把有花的坐标点给存下来,存成一个数组,假设叫flowerCoor,然后每次query的时候就从flowerCoor里面取花的坐标,然后计算。

    第二题:leetcode 837 New 21 Game

    https://leetcode.com/problems/new-21-game/description/

    面试官化简了一下这个题,他的问题是桌面上有10张扑克牌,代表[1, 10]这个区间的数字,玩家一开始有个基础分数 score, 游戏开始,score 代表现在点数,如果 score < 17, 那么庄家随机翻一张牌,累加score;如果 score 在[17, 21] 这个区间中,就代表庄家win;如果 score > 21 就代表玩家win。求玩家 win 的概率。

    前面怎么讨论的我有点记不清了,但是妹子说了一句“这个题有点递归的意思”,然后就开始递归做。递归可以做。(不知道如果递归写全对的话,下面follow-up会不会扩大规模考 dp。不过想不到 dp不知道是 hired 还是 weak hired 了)

    lc递归会超时,我加了记忆化递归也超时了 :( ,lc给的是 dp 解法。

    mock的时候群里小伙伴有人说这题和 688 很像:https://leetcode.com/problems/knight-probability-in-chessboard/description/

    第三题:leetcode 636 Exclusive Time of Functions

    https://leetcode.com/problems/exclusive-time-of-functions/description/

    第三题有点类似资源抢占调度的一道题。

     task 1:  start,  0

     task 2:  start,  2

     task 2:  end,  3

     task 1:  end,  4

     task 2:  start, 6

     task 2:  end,  7

    start, end just mean get schecduled, like process to CPU, only one cpu, so if task2 started, task 1 paused。

    要求返回每个task占用cpu的时间。返回map也好,数组也好,都行。

    用stack解,我还没仔细想。我估计应该是用一个变量或者pair存某个任务被中断的时间?

    第四题:leetcode 528. Random Pick with Weight

    https://leetcode.com/problems/random-pick-with-weight/description/

    群主给的就是有 N 个人种,每个人种的占比,实现一个算法,这个算法每次都会返回一个人种,在调用K(K是一个很大的数)次的情况下,所有的返回值的比例满足人种的占比。

    given possibility like

    chinese  22%

    american:  5%

    indian: 21%

    ...

    各个概率之和保证为1,随机选一个,要求符合概率,如按22.333% sample chinese..

    妹子一开始想的有点类似于基数了,就是比如说chinese占了22%,American占了 5%,那我搞一个 100 个人的数组,前 22 个元素 代表 chinese, 23 ~ 28 个元素代表 american。然后 1 ~ 100 内随机一个随机数,求得。然后面试官反问,如果占比不是整数呢,比如 22.345676798878888%这种,那是不是要开一个巨大的数组存这些数。于是这个思路走进死胡同了。群里有小伙伴说,如果有个 0 ~ 1 的随机数发生器就好了。我们可以这么思考,就是我们把概率数组求前缀和,然后随机一个 0 ~ 1 的数,在前缀和数组中二分这个数字就可以了。

    题解:前缀和 + 二分。

  • 相关阅读:
    Hash基础相关知识点总结
    Java程序员简历模板
    nginx中C语言操作技巧学习
    C标准库中转换wchar_t和char类型的字符串
    golang中接口interface和struct结构类的分析
    oracle 使用occi方式 批量插入多条数据
    oracle 使用occi方式插入数据时中文乱码
    在linux下监控文件是否被删除或创建的命令
    QT 中设置按钮图片和文字的两种方法
    Windows操作系统下 使用c++ WIN32API禁用控制台最小化和关闭按钮
  • 原文地址:https://www.cnblogs.com/zhangwanying/p/10199941.html
Copyright © 2011-2022 走看看