算法群模拟面试记录
第一場(chǎng):2018年12月30日(周日),北京時(shí)間早上五點(diǎn)。
寫(xiě)在最前面:好不容易五點(diǎn)爬了起來(lái)圍觀(guān)mock,結(jié)果早上周賽睡過(guò)去了,唉。orz。
面試官:wisdompeak,同學(xué):littleRainRain
第一題:有個(gè)花圃矩陣 grid,size 是n * m,花圃上面的一個(gè)點(diǎn),坐標(biāo)是(x, y)上面可能有花,可能沒(méi)有花(沒(méi)有花的話(huà),矩陣上的值為0)。如果一個(gè)Q(x,y)上有花的話(huà),grid[x][y] = W, W代表這朵花的香氣,隨著距離這朵花越來(lái)越遠(yuǎn),花的香氣會(huì)逐漸減弱,減弱的關(guān)系和兩個(gè)點(diǎn)的曼哈頓距離成正比,比如在點(diǎn) P(x1, y1),能聞到在點(diǎn)Q的花的香味是 f = W / (abs(x- x1) + abs(y-y1))。輸入一個(gè)P點(diǎn)的坐標(biāo)(px, py),求在這個(gè)P點(diǎn),能聞到花的香味最重的點(diǎn)坐標(biāo)。
題解:直接二維矩陣遍歷就行。只有一點(diǎn)需要注意的就是曼哈頓距離為0的時(shí)候,0不能做除數(shù),怎么處理要問(wèn)面試官,不要自己yy。
follow-up,能不能讓算法更快一點(diǎn)?(其實(shí)我覺(jué)得這個(gè)問(wèn)法不是特別的優(yōu)秀,第一次聽(tīng)到了比較容易懵逼,如果我是面試者的話(huà)下面不知道該怎么接。直接問(wèn)具體條件有什么變化,還是新增了什么條件么)
我第一次聽(tīng)到follow-up有點(diǎn)懵逼,我還以為難道bfs能解...但是迅速的否認(rèn)了自己的想法,想象一下如果有個(gè)點(diǎn)距離給出的P點(diǎn)非常非常遠(yuǎn),但是它的W非常非常大,這個(gè)點(diǎn)也有可能是candidate。
后來(lái)面試官解釋了一下,假設(shè)這個(gè)花圃上面就幾朵花呢?然后調(diào)用query方法N次,如何加速這個(gè)算法(言下之意是這個(gè)矩陣是一個(gè)稀疏矩陣)
ok,那我們開(kāi)始預(yù)處理下矩陣,把有花的坐標(biāo)點(diǎn)給存下來(lái),存成一個(gè)數(shù)組,假設(shè)叫flowerCoor,然后每次query的時(shí)候就從flowerCoor里面取花的坐標(biāo),然后計(jì)算。
?
第二題:leetcode 837 New 21 Game
https://leetcode.com/problems/new-21-game/description/
面試官化簡(jiǎn)了一下這個(gè)題,他的問(wèn)題是桌面上有10張撲克牌,代表[1, 10]這個(gè)區(qū)間的數(shù)字,玩家一開(kāi)始有個(gè)基礎(chǔ)分?jǐn)?shù) score, 游戲開(kāi)始,score 代表現(xiàn)在點(diǎn)數(shù),如果 score < 17, 那么莊家隨機(jī)翻一張牌,累加score;如果 score 在[17, 21] 這個(gè)區(qū)間中,就代表莊家win;如果 score > 21 就代表玩家win。求玩家 win 的概率。
前面怎么討論的我有點(diǎn)記不清了,但是妹子說(shuō)了一句“這個(gè)題有點(diǎn)遞歸的意思”,然后就開(kāi)始遞歸做。遞歸可以做。(不知道如果遞歸寫(xiě)全對(duì)的話(huà),下面follow-up會(huì)不會(huì)擴(kuò)大規(guī)模考 dp。不過(guò)想不到 dp不知道是 hired 還是 weak hired 了)
lc遞歸會(huì)超時(shí),我加了記憶化遞歸也超時(shí)了 :( ,lc給的是 dp 解法。
mock的時(shí)候群里小伙伴有人說(shuō)這題和 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/
第三題有點(diǎn)類(lèi)似資源搶占調(diào)度的一道題。
?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。
要求返回每個(gè)task占用cpu的時(shí)間。返回map也好,數(shù)組也好,都行。
用stack解,我還沒(méi)仔細(xì)想。我估計(jì)應(yīng)該是用一個(gè)變量或者pair存某個(gè)任務(wù)被中斷的時(shí)間?
?
第四題:leetcode 528. Random Pick with Weight
https://leetcode.com/problems/random-pick-with-weight/description/
群主給的就是有 N 個(gè)人種,每個(gè)人種的占比,實(shí)現(xiàn)一個(gè)算法,這個(gè)算法每次都會(huì)返回一個(gè)人種,在調(diào)用K(K是一個(gè)很大的數(shù))次的情況下,所有的返回值的比例滿(mǎn)足人種的占比。
given possibility like
chinese? 22%
american:? 5%
indian: 21%
...
各個(gè)概率之和保證為1,隨機(jī)選一個(gè),要求符合概率,如按22.333% sample chinese..
?
妹子一開(kāi)始想的有點(diǎn)類(lèi)似于基數(shù)了,就是比如說(shuō)chinese占了22%,American占了 5%,那我搞一個(gè) 100 個(gè)人的數(shù)組,前 22 個(gè)元素 代表 chinese, 23 ~ 28 個(gè)元素代表 american。然后 1 ~ 100 內(nèi)隨機(jī)一個(gè)隨機(jī)數(shù),求得。然后面試官反問(wèn),如果占比不是整數(shù)呢,比如 22.345676798878888%這種,那是不是要開(kāi)一個(gè)巨大的數(shù)組存這些數(shù)。于是這個(gè)思路走進(jìn)死胡同了。群里有小伙伴說(shuō),如果有個(gè) 0 ~ 1 的隨機(jī)數(shù)發(fā)生器就好了。我們可以這么思考,就是我們把概率數(shù)組求前綴和,然后隨機(jī)一個(gè) 0 ~ 1 的數(shù),在前綴和數(shù)組中二分這個(gè)數(shù)字就可以了。
題解:前綴和 + 二分。
?
轉(zhuǎn)載于:https://www.cnblogs.com/zhangwanying/p/10199941.html
總結(jié)
- 上一篇: 主成分分析原理解释(能力工场小马哥)
- 下一篇: 【SRH】------node遵循的规范