1. 程式人生 > >【面經筆記】好未來

【面經筆記】好未來

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

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

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

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

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

然後過,下一題。

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

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

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

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

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

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

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

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

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

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

我說二分查詢?

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

我回來想了個方法:

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

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

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