算法題彙總(面試準備)

 

1.二叉樹的前序,中序,後序遍歷,遞歸和非遞歸的寫法

2.一個數組,把其中奇數放在左邊,偶數放在右邊,不要求滿足原始序列關係,要求inplace 時間On 空間O1

3.紅黑樹簡單介紹一下,內部實現原理,主要用來做什麼?

4.鏈表相關算法題

  1. 一個鏈表如何找中間點
  2. 鏈表如何判斷是否有環
  3. 如果有環如何找到環的起點
  4. 兩個鏈表如何判斷是否有公共部分
  5. D情況下如果鏈表有環怎麼辦
  6. E情況下怎麼找環的起點和公共部分起點

5.計算n的三次根號的值。(如果只能用梯度下降怎麼做)

6.一個字符串中,有數字、字母、符號,求最長數字序列;求最長的、最多包含一個字母的數字序列。

7.64匹馬,8個賽道,假設每匹馬發揮穩定且沒有體力問題,如果在用最少的比賽次數,選出跑的最快的8匹馬?1024瓶毒藥,10只老鼠的題。

9.leetcode二叉樹題目中,可以自定義輸入,輸入一個list(默認完全二叉樹,如果節點爲空,則輸入None),解析爲一個二叉樹的數據結構。

10.最大子串(動態規劃)

11.n乘n矩陣,每個點是任意整數,輸出和爲最大的子矩陣內所有數的和,最優解複雜度n^3

12.二叉樹層序遍歷

13.內存拷貝,實現函數void memcpy(char* src, char* dest, int len);

需要考慮兩個指針在長度len範圍內有重疊的現象。

14.無序數組,找出最大值最小值    我的複雜度是2n,他說有複雜度是n的算法。

15.對很多圖像的特徵(1024維)進行檢索,有什麼壓縮的方法嗎?壓縮精度:float32->int 8

16.對多個文件,文件存儲了很多浮點數,要求內存不超過2G,但是每個文件都大於2G,怎麼排序?

17.手寫洗牌算法:N張牌等概率出現在每個位置

18.判斷鏈表是否有環(快慢指針)

19.判斷平衡二叉樹(我只想到了最麻煩的層次遍歷數葉子節點所在層數)

20.走一截臺階還是兩節臺階, f(n)=f(n-1)+f(n-2)的這種(遞歸,DP,推薦直接說DP的方案)

21.股票交易記錄求最大的買入和賣出的差值

22.1-N的所有素數,爲什麼要求根號,還有沒有更優解?

23. 紅黑樹,B+,平衡二叉樹

24.鏈表排序和top k問題

25. 三種常見的最短路徑算法;狄傑斯特拉,普里姆,弗洛依德算法

(1)深度優先搜索和廣度優先搜索(解決單源最短路徑, 正權邊)

從起始結點開始訪問所有的深度遍歷路徑或廣度優先路徑,則到達終點結點的路徑有多條,取其中路徑權值最短的一條則爲最短路徑。

(2)弗洛依德算法(解決單多源最短路徑, 正權邊)

基本思想:最開始只允許經過1號頂點進行中轉,接下來只允許經過1號和2號頂點進行中轉......允許經過1~n號所有頂點進行中轉來不斷動態更新任意兩點之間的最短路程即求從i號頂點到j號頂點只經過前k號點的最短路程。

(3)狄傑斯特拉(解決單源最短路徑, 正權邊

基本思想:每次找到離源點(如1號結點)最近的一個頂點然後以該頂點爲中心進行擴展最終得到源點到其餘所有點的最短路徑
基本步驟:

1)設置標記數組book[]:將所有的頂點分爲兩部分,已知最短路徑的頂點集合P和未知最短路徑的頂點集合Q很顯然最開始集合P只有源點一個頂點book[i]爲1表示在集合P中;
2)設置最短路徑數組dst[]並不斷更新:初始狀態下,令dst[i] = edge[s][i](s爲源點,edge爲鄰接矩陣),很顯然此時dst[s]=0,book[s]=1。此時,在集合Q中可選擇一個離源點s最近的頂點u加入到P中。並依據以u爲新的中心點,對每一條邊進行鬆弛操作(鬆弛是指由結點s-->j的途中可以經過點u,並令dst[j]=min{dst[j], dst[u]+edge[u][j]}),並令book[u]=1;
3)在集合Q中再次選擇一個離源點s最近的頂點v加入到P中。並依據v爲新的中心點,對每一條邊進行鬆弛操作(即dst[j]=min{dst[j], dst[v]+edge[v][j]}),並令book[v]=1;
4)重複3,直至集合Q爲空。

(4)Bellman-Ford算法(解決負權邊,解決單源最短路徑,前幾種方法不能求含負權邊的圖)::時間複雜度O(nm),空間複雜度O(m)

主要思想:對所有的邊進行n-1輪鬆弛操作,因爲在一個含有n個頂點的圖中,任意兩點之間的最短路徑最多包含n-1邊。換句話說,第1輪在對所有的邊進行鬆弛後,得到的是從1號頂點只能經過一條邊到達其餘各定點的最短路徑長度。第2輪在對所有的邊進行鬆弛後,得到的是從1號頂點只能經過兩條邊到達其餘各定點的最短路徑長度。。。。。

Bellman_Ford還可以檢測一個圖是否含有負權迴路如果在進行n-1輪鬆弛後仍然存在dst[e[i]] > dst[s[i]]+w[i]。

推薦:https://blog.csdn.net/wzy_2017/article/details/78910697

26.最小生成樹 prim算法和Kruskal算法

(1)Prim 算法(以定點爲中心的最小生成樹)

(2)Kruskal 算法(以邊爲中心的最小生成樹算法)

26.最小生成樹 prim算法和Kruskal算法

拓撲排序的基礎:有向無環圖,它是描述一項工程進度的有效工具。

用頂點表示活動,用弧表示活動間優先關係的有向圖稱爲頂點表示活動的網(Activity On Vertex network),簡稱AOV網

在AOV網中,完成工程的最短時間:從開始點到完成點的最長路徑長度——關鍵路徑。

參考博客:

https://blog.csdn.net/matrix_laboratory/article/details/11879127

 

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