寫在最前面:好不容易五點爬了起來圍觀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。dom
follow-up,能不能讓算法更快一點?(其實我以爲這個問法不是特別的優秀,第一次聽到了比較容易懵逼,若是我是面試者的話下面不知道該怎麼接。直接問具體條件有什麼變化,仍是新增了什麼條件麼)spa
我第一次聽到follow-up有點懵逼,我還覺得難道bfs能解...可是迅速的否定了本身的想法,想象一下若是有個點距離給出的P點很是很是遠,可是它的W很是很是大,這個點也有多是candidate。code
後來面試官解釋了一下,假設這個花圃上面就幾朵花呢?而後調用query方法N次,如何加速這個算法(言下之意是這個矩陣是一個稀疏矩陣)遞歸
ok,那咱們開始預處理下矩陣,把有花的座標點給存下來,存成一個數組,假設叫flowerCoor,而後每次query的時候就從flowerCoor裏面取花的座標,而後計算。遊戲
第二題:leetcode 837 New 21 Gameip
https://leetcode.com/problems/new-21-game/description/leetcode
面試官化簡了一下這個題,他的問題是桌面上有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 的數,在前綴和數組中二分這個數字就能夠了。
題解:前綴和 + 二分。