【面經筆記】好未來
阿新 • • 發佈:2019-02-07
1、 手寫二叉搜尋樹的插入、刪除
沒寫過,刪除操作完全寫錯了。
2、輸入流的頻率TOPk問題,引出堆的實現
我先實現了演算法導論中自頂向下的維護堆的函式MAX_HEAPIFY()。
面試官說不好,應該寫個自底向上的、、、、、、、、、、、、、、、、、、、他可能把MAX_HEAPIFY()維護堆理解成了HEAP_INCREACE_KEY()維護堆。
然後過,下一題。
3、給定一個M*N的棋盤,給定一個出發點,終點。只能走”日”,即馬走日。判斷能否到達終點。
我寫了個廣度優先搜尋路徑的演算法
面試官想了半天,說可能不對:已經遍歷的點,不會再入佇列,所以某個點如果要走兩遍的話會出問題。
當時沒堅持。回來想想,這種情況根本就是扯淡。
面試官說正確解法是動態規劃。
神TM動態規劃,就是從k步能到達的點推匯出k+1步能到達的所有點!沒有新增的可達點時退出迭代。
重複計算太多,還不如尋路演算法快。
4、求兩個相同大小的有序陣列的中位數。
當時想了個兩個指標同時遍歷,類似歸併的思路。O(n)
然後,面試官說能不能更快
我說二分查詢?
他沒回答我,感覺面試官沒興趣了,我就沒繼續往下想了
我回來想了個方法:
由於兩個指標的位置是相互有關係
大概就是:index1+index2 == n這種
可以二分查詢其中一個指標位置,另一個指標位置使用上述關係得到。判斷兩個指標的值是否相同或者相鄰即可。