【面經筆記】好未來 - 已掛

1、 手寫二叉搜索樹的插入、刪除

沒寫過,刪除操作完全寫錯了。


2、輸入流的頻率TOPk問題,引出堆的實現

我先實現了算法導論中自頂向下的維護堆的函數MAX_HEAPIFY()。

面試官說不好,應該寫個自底向上的、、、、、、、、、、、、、、、、、、、他可能把MAX_HEAPIFY()維護堆理解成了HEAP_INCREACE_KEY()維護堆。

然後過,下一題。


3、給定一個M*N的棋盤,給定一個出發點,終點。只能走”日”,即馬走日。判斷能否到達終點。

我寫了個廣度優先搜索路徑的算法

面試官想了半天,說可能不對:已經遍歷的點,不會再入隊列,所以某個點如果要走兩遍的話會出問題。

當時沒堅持。回來想想,這種情況根本就是扯淡。

面試官說正確解法是動態規劃。

神TM動態規劃,就是從k步能到達的點推導出k+1步能到達的所有點!沒有新增的可達點時退出迭代。

重複計算太多,還不如尋路算法快。


4、求兩個相同大小的有序數組的中位數。

當時想了個兩個指針同時遍歷,類似歸併的思路。O(n)

然後,面試官說能不能更快

我說二分查找?

他沒回答我,感覺面試官沒興趣了,我就沒繼續往下想了

我回來想了個方法:

由於兩個指針的位置是相互有關係

大概就是:index1+index2 == n這種

可以二分查找其中一個指針位置,另一個指針位置使用上述關係得到。判斷兩個指針的值是否相同或者相鄰即可。

標準解法是分治思想:http://www.acmerblog.com/median-of-two-sorted-arrays-5967.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章