互聯網公司面試問題總結之數據結構和算法

二、數據結構

部分一:

1圖有幾種存儲方式?鄰接矩陣與鄰接表存儲結構的優缺點?什麼時候用什麼結構?

2、(1排序算法哪些是穩定排序?歸併排序常用於哪裏?

2你所知道的最快的排序算法?

3若在數據庫底層進行排序,該如何設計排序算法?

4快排的思路手寫快排

5堆排序

6排序算法

7希爾排序

8Onlogn)的排序算法,選一個(寫的堆排)

9知道的所有排序,及其時空複雜度和是否穩定

10排序爲什麼分穩定不穩定

11)設計一個排序類,你會選用哪種排序算法,爲什麼

常用排序的時間複雜度和優缺點

 

 12 那你說下排序算法吧
    - 這個也是我之前仔細研究過的。我把經典的八大排序的原理、時間複雜度、空間複雜度、穩定性都仔細說了一遍。(注意不要直接說答案,最好是能分享,這樣面試官才知道你是真正理解了)
    - 我還回答了通排序(基數排序、計數排序)的原理以及和八大排序做了對比。

 

2查找的複雜度

查找算法

3、(1手寫斐波那契數列?

2爲什麼不用遞歸?遞歸有什麼不好?那爲什麼不用inline來寫遞歸呢?如何來避免遞歸?

4、網絡字節序與主機字節序的區別?爲何要有這樣的區別?

5內存對齊,爲什麼要內存對齊

6常見的頁面置換算法?

7、(1)循環與遞歸的區別

2什麼是遞歸,遞歸的幾個條件?寫遞歸要注意些什麼?

8二叉樹給出前序,中序求後序

9、字符串匹配,O(n+m)

字符串匹配(可以用KMP),本人寫的KMP

10給一個單鏈表如何判斷有環?

11、用什麼數據結構保存cookie

12、手寫vector刪除元素,需要注意迭代器失效情況。

13一致性哈希

14、(1)如何判斷一個圖是否有環

2如何判斷一個單鏈表是否有環?

15、(1紅黑樹查找、刪除、增加的複雜度,爲什麼?

2)紅黑樹 特性和與AVL數比較 B樹比較

16哈希表

17堆結構

181)二叉排序樹的插入算法(手寫)

2)二叉樹先序遍歷(手寫)

191)鏈表判斷環的入口

2)怎麼判斷兩個鏈表是否相交

20  java 幾種修飾符 的區別

21、說一下對B+樹的瞭解

22、 索引有哪些?分別有什麼特點?

23 HashMap問題

針對HashMap中某個Entry鏈太長,查找的時間複雜度可能達到O(n),怎麼優化?

當時說了可能是容量或者hash算法的原因,說了擴容,尋找好的hash算法替代,然後面試官說不是這兩個原因造成的,當時LZ也不知道JDK8中是採用紅黑樹進行處理的,就想不是爲了降低查找時間複雜度嗎,就說了用有序數組存儲鏈表的數據,也就想到用有序數組查找的時間複雜度爲O(nlogn )來解決,也是病急亂投醫吧,最後面試官說也算是一種方法吧。

24、拓撲排序思想

25hash衝突的四種辦法

26中序遍歷的非遞歸做法?引出BFSDFS的區別

27、什麼情況會棧溢出

28B+樹和二叉樹查找時間複雜度

29、常用的hash算法有哪些

 30、如果想實現一個線程安全的隊列,可以怎麼實現?
       JUC包裏的ArrayBlockingQueue 還有LinkedBlockingQueue啥的又結合源碼說了一通。 

 

部分二:

1. 鏈表與數組。

 2.隊列和棧,出棧與入棧。

3. 鏈表的刪除、插入、反向。

4. 字符串操作。

5. Hash表的hash函數,衝突解決方法有哪些。

6. 各種排序:冒泡、選擇、插入、希爾、歸併、快排、堆排、桶排、基數的原理、平均時間複雜度、最壞時間複雜度、空間複雜度、是否穩定。

7. 快排的partition函數與歸併的Merge函數。

8. 對冒泡與快排的改進。

9. 二分查找,與變種二分查找。

10. 二叉樹、B+樹、AVL樹、紅黑樹、哈夫曼樹。

11. 二叉樹的前中後續遍歷:遞歸與非遞歸寫法,層序遍歷算法。

12. 圖的BFSDFS算法,最小生成樹prim算法與最短路徑Dijkstra算法。

13. KMP算法。

14. 排列組合問題。

15. 動態規劃、貪心算法、分治算法。(一般不會問到)

16. 大數據處理:類似10億條數據找出最大的1000個數.........等等

部分三:

1、給你一萬個數,如何找出裏面所有重複的數?用所有你能想到的方法,時間複雜度和空間複雜度分別是多少?

2、給你一個數組,如何裏面找到和爲K的兩個數?

3100000個數找出最小或最大的10個?

4、一堆數字裏面繼續去重,要怎麼處理?

 5、利用數組,實現一個循環隊列類

6、 從N個無序數中尋找Top-k個最小數( 經典海量數據 )?

71G的內存可以裝入2G的程序麼?怎麼裝?

8、n級臺階問題

9、手寫代碼,有序數組查找某個元素出現的次數

10、手寫螺旋矩陣打印

11象棋中馬走日從A點到B點的最短路徑走法

12、長爲N的數組,元素範圍是0-N-1,其中只有一個數是重複的,找出這個重複元素

13矩陣從左上角向右下角走,每次只能向右或者向下移動,求經過最大的路徑

14n可以由完全平方數構成,求最小的完全平方數構成數。

15、(1兩個棧實現一個隊列

2)怎麼找出數組中出現兩次的數(有兩個數出現兩次,其他的都是一次)

3)旋轉數組的最小值

4O1)時間複雜度刪除單鏈表結點

5)約瑟夫環問題推導

6O1)實現取棧的最小

16給定一個2叉樹,打印每一層最右邊的結點

17給定一個數組,裏面只有一個數出現了一次,其他都出現了兩次。怎麼得到這個出現了一次的數?

186基礎上,如果有兩個不同數的出現了一次,其他出現了兩次,怎麼得到這兩個數?

19、無重複數組找出第K大的數字 引出堆排序(是否穩定,時間/空間複雜度)

20 給定n個數,尋找第k小的數,同時給出時間複雜度

21比較常見的算法題,也要考慮到n的大小,說了排序,最大堆,以及partition算法,面試官還讓說我說就知道這幾種

2210G個數進行排序,限制內存爲1G

  大數問題,但是這10G個數可能是整數,字符串以及中文改如何排序,對中文排序沒有回答出來。

23 鏈表刪去指定值的節點

23 寫一個類似解析字符串的小程序(感覺考點是正則表達式)

24求兩個int數組的並集、交集

2511個漢諾塔問題,打印出轉移路徑,接着寫一個二叉樹前序遍歷的代碼,最後讓寫一個多叉樹實現,並層次遍歷的代碼

 

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