雖然金九銀十過去了,但是還是有一些小伙伴在面試刷題的路上,不知演算法與資料結構會不會成為你的坎?
恰好,我這兩天花了點時間,整理了些各大廠(Google+百度+Alibaba+位元組+Tencent+網易+360+拼夕夕+美團+小米)面試程序中的一些演算法題,不來試個水測驗一下自己?


總共列舉了近十家的一些演算法面試題,且這些全都能在<程式員代碼面試指南-IT名企演算法與資料結構題目最優解><演算法刷題LeetCode><演算法-第4版>(文末有介紹)找到對應的解讀,需要學習一下的朋友文末有免費獲取方式
演算法血拼:Google+百度+Alibaba+位元組+Tencent+網易+360+拼夕夕+美團+小米
第一個:Alibaba[搜索推薦]
一面:演算法題:長度為n的陣列里放了n+1個大小在[1,n]的數,必然至少有一個重復的數,找出來
二面:概率題:求一根繩子被切兩刀能組成一個三角形的概率,
三面主管面:FM推導,deepfm原理,graph embedding,問了之前的一些專案,
四面交叉面:模型上線時應該注意的事,如果請求過高模型服務掛了怎么辦,tensorflow和torch的區別,如何降低模型復雜度,
第二個:百度
原生商業推廣部
一面:演算法題:快排非遞回,旋轉有序陣列找某個值
二面:演算法題:一個二維陣列,上有0和1,把所有相鄰的1給連起來,求最終有幾塊連起來的1, L1和L2正則區別,softmax損失函式
推薦技術平臺部
一面:演算法題:bitmap
二面:演算法題:鏈表去重,擴展:洗掉鏈表中的所有重復值
第三個:Google
心酸吶,之前一直想去投崗谷歌,結果卻倒在了這么一道小小的演算法題上...
演算法題:設計一個回圈有序鏈表,實作增刪改查四個函式,
第四個:位元組
位元組最愛演算法...
演算法題:蛇形列印二叉樹
演算法題:給出[[1, 2], [3, 5], [8, 8], [15, 16], [32, 38]],求間隔
演算法題:給出兩個升序陣列A、B和長度m、n,求第k個大的數
演算法題:給出陣列A,長度為n,陣列中元素的值位于[0, n - 1]之間,求是否有重復元素
演算法題:二叉樹的左視圖
演算法題:面值[1,3,4]的硬幣,輸入n,輸出最少組成n的硬幣個數以及組成的硬幣
演算法題:給定正整數n,問1-n組成的二叉搜索樹有多少
第五個:Tencent
演算法題:合并有序鏈表
演算法題:有序整數陣列,給定一個數,從陣列中找出2個數相加等于它,要求O(n)時間復雜度
演算法題:一個字串,假設空足夠,將其中所有空格替換為"%20",要求不開辟額外新空間
演算法題:說思路,100臺機器,每臺機器上10億個數,求里面最大的100個數
演算法題:判斷一個二叉樹是否存在一個路徑和為指定值的路徑(不用臨時變數)
演算法題:大數相乘(直接敲代碼,十分鐘后回來看結果)
第六個:網易
演算法題:給定0~9的英文OneTwoThree...這種的字串,將其完全亂序,怎么還原其中的各個數?
演算法題:給定n個正整數,找到ai和aj,使得(i,0)(i,ai)(j,0)構成的形狀最大
演算法題:最大子序和 leetcode 53
演算法題:字串排序(區分大小寫)
第七個:360搜索
一面:演算法題:在大量文本中匹配詞表
二面:演算法題:字串編輯距離,求第n個丑數,最長公共子串
三面:演算法題:設計一個hashmap
演算法精英加面一面:演算法題:長度為n的陣列里放了n+1個大小在[1,n]的數,必然至少有一個重復的數,找出來
第八個:拼夕夕
一面,演算法題:鏈表快排
二面,智力題:100個球,甲乙兩個人依次拿球,每次只能拿1-5個,甲先拿,求甲必勝的方案
第九個:美團北斗
一面問了實習專案,演算法題:旋轉有序陣列找某個值
二面也偏重專案,演算法題:使用O(N)復雜度完成GBDT分裂
三面還是專案,演算法題:找出無序陣列中相隔距離最長的逆序對
第十個:小米搜索
一面問了專案,演算法題:一個陣列里只有0和1,把0換到1前面,不能使用統計次數的方法,擴展:如果有0,1,2三個數咋辦?
二面專案,演算法題:無向圖的迪杰斯特拉演算法實作,

演算法血拼:<程式員代碼面試指南-IT名企演算法與資料結構題目最優解><演算法刷題LeetCode><演算法-第4版>
[演算法血拼相關的演算法刷題與筆記]等早已整理存放在一個檔案夾里了

第一個:<演算法-第4版>
作為演算法領域經典的參考書,全面介紹了關于演算法和資料結構的必備知識,并特別針對排序、搜索、圖處理和字串處理進行了論述,第 4 版具體給出了每位程式員應知應會的 50 個演算法,提供了實際代碼,而且這些 Java 代碼實作采用了模塊化的編程風格,讀者可以方便地加以改造



第二個:<程式員代碼面試指南-IT名企演算法與資料結構題目最優解>
左程云(左神)的<程式員代碼面試指南-IT名企演算法與資料結構題目最優解>包含了近200道真實出現過的經典代碼面試題(且每個都有標明難度等級小星星),分為以下九個部分:
一、堆疊和佇列部分(10)
二、鏈表問題(20)
三、二叉樹問題(24)
四、遞回和動態規劃(17)
五、字串問題(23)
六、大資料和空間限制(6)
七、位運算(6)
八、陣列和矩陣問題(26)
九、其他問題(34)
程式員代碼面試指南-IT名企演算法與資料結構題目最優解:堆疊和佇列部分(10)
1. 設計一個有getMin功能的堆疊(士★☆☆☆)
2. 由兩個堆疊組成的佇列(尉★★☆☆)
3. 如何僅用遞回函式和堆疊操作逆序一個堆疊(尉★★☆☆)
4. 貓狗佇列(士★☆☆☆)
5. 用一個堆疊實作另一個堆疊的排序(士★☆☆☆)
6. 用堆疊來求解漢諾塔問題(校★★★☆)
7. 生成視窗最大值陣列(尉★★☆☆)
8. 構造陣列的MaxTree(校★★★☆)
9. 求最大子矩陣的大小(校★★★☆)
10. 最大值減去最小值小于或等于num的子陣列數量(校★★★☆)
程式員代碼面試指南-IT名企演算法與資料結構題目最優解:鏈表問題(20)
1. 列印兩個有序鏈表的公共部分(士★☆☆☆)
2. 在單鏈表和雙鏈表中洗掉倒數第K 個節點(士★☆☆☆)
3. 洗掉鏈表的中間節點和a/b 處的節點(士★☆☆☆)
4. 反轉單向和雙向鏈表(士★☆☆☆)
5. 反轉部分單向鏈表(士★☆☆☆)
6. 環形單鏈表的約瑟夫問題(原問題:士★☆☆☆進階:校★★★☆)
7. 判斷一個鏈表是否為回文結構(普通解法士★☆☆☆)(進階解法尉★★☆☆)
8. 將單向鏈表按某值劃分成左邊小、中間相等、右邊大的形式(尉★★☆☆)
9. 復制含有隨機指標節點的鏈表(尉★★☆☆)
10. 兩個單鏈表生成相加鏈表(士★☆☆☆)
11. 兩個單鏈表相交的一系列問題(將★★★★)
12. 將單鏈表的每K個節點之間逆序(尉★★☆☆)
13. 洗掉無序單鏈表中值重復出現的節點(士★☆☆☆)
14. 在單鏈表中洗掉指定值的節點(士★☆☆☆)
15. 將搜索二叉樹轉換成雙向鏈表(尉★★☆☆)
16. 單鏈表的選擇排序(士★☆☆☆)
17. 一種怪異的節點洗掉方式(士★☆☆☆)
18. 向有序的環形單鏈表中插入新節點(士★☆☆☆)
19. 合并兩個有序的單鏈表(士★☆☆☆)
20. 按照左右半區的方式重新組合單鏈表(士★☆☆☆)

程式員代碼面試指南-IT名企演算法與資料結構題目最優解:二叉樹問題(24)
1. 分別用遞回和非遞回方式實作二叉樹先序、中序和后序遍歷(校★★★☆)
2. 列印二叉樹的邊界節點(尉★★☆☆)
3. 如何較為直觀地列印二叉樹(尉★★☆☆)
4. 二叉樹的序列化和反序列化(士★☆☆☆)
5. 遍歷二叉樹的神級方法(將★★★★)
6. 在二叉樹中找到累加和為指定值的最長路徑長度(尉★★☆☆)
7. 找到二叉樹中的最大搜索二叉子樹(尉★★☆☆)
8. 找到二叉樹中符合搜索二叉樹條件的最大拓撲結構(校★★★☆)
9. 二叉樹的按層列印與ZigZag列印(尉★★☆☆)
10. 調整搜索二叉樹中兩個錯誤的節點(原問題:尉★★☆☆)(進階問題:將★★★★)
11. 判斷t1 樹是否包含t2 樹全部的拓撲結構(士★☆☆☆)
12. 判斷t1 樹中是否有與t2 樹拓撲結構完全相同的子樹(校★★★☆)
13. 判斷二叉樹是否為平衡二叉樹(士★☆☆☆)
14. 根據后序陣列重建搜索二叉樹(士★☆☆☆)
15. 判斷一棵二叉樹是否為搜索二叉樹和完全二叉樹(士★☆☆☆)
16. 通過有序陣列生成平衡搜索二叉樹(士★☆☆☆)
17. 在二叉樹中找到一個節點的后繼節點(尉★★☆☆)
18. 在二叉樹中找到兩個節點的最近公共祖先(原問題:士★☆☆☆)(進階問題:尉★★☆☆再進階問題:校★★★☆)
19. Tarjan演算法與并查集解決二叉樹節點間最近公共祖先的批量查詢問題(校★★★☆)
20. 二叉樹節點間的最大距離問題(尉★★☆☆)
21. 先序、中序和后序陣列兩兩結合重構二叉樹(先序與中序結合士★☆☆☆)(中序與后序結 合士★☆☆☆先序與后序結合尉★★☆☆)
22. 通過先序和中序陣列生成后序陣列(士★☆☆☆)
23. 統計和生成所有不同的二叉樹(尉★★☆☆)
24. 統計完全二叉樹的節點數(尉★★☆☆)

程式員代碼面試指南-IT名企演算法與資料結構題目最優解:遞回和動態規劃(17)
1. 斐波那契系列問題的遞回和動態規劃(將★★★★)
2. 矩陣的最小路徑和(尉★★☆☆)
3. 換錢的最少貨幣數(尉★★☆☆)
4. 換錢的方法數(尉★★☆☆)
5. 最長遞增子序列(校★★★☆)
6. 漢諾塔問題(校★★★☆)
7. 最長公共子序列問題(尉★★☆☆)
8. 最長公共子串問題(校★★★☆)
9. 最小編輯代價(校★★★☆)
10. 字串的交錯組成(校★★★☆)
11. 龍與地下城游戲問題(尉★★☆☆)
12. 數字字串轉換為字母組合的種數(尉★★☆☆)
13. 運算式得到期望結果的組成種數(校★★★☆)
14. 排成一條線的紙牌博弈問題(尉★★☆☆)
15. 跳躍游戲(士★☆☆☆)
16. 陣列中的最長連續序列(尉★★☆☆)
17. N皇后問題(校★★★☆)

程式員代碼面試指南-IT名企演算法與資料結構題目最優解:字串問題(23)
1. 判斷兩個字串是否互為變形詞(士★☆☆☆)
2. 字串中數字子串的求和(士★☆☆☆)
3. 去掉字串中連續出現k 個0 的子串(士★☆☆☆)
4. 判斷兩個字串是否互為旋轉詞(士★☆☆☆)
5. 將整數字串轉成整數值(尉★★☆☆)
6. 替換字串中連續出現的指定字串(士★☆☆☆)
7. 字串的統計字串(士★☆☆☆)
8. 判斷字符陣列中是否所有的字符都只出現過一次(按要求1 實作的方法士★☆☆☆)(按要求2 實作的方法尉★★☆☆)
9. 在有序但含有空的陣列中查找字串(尉★★☆☆)
10. 字串的調整與替換(士★☆☆☆)
11. 翻轉字串(士★☆☆☆)
12. 陣列中兩個字串的最小距離(尉★★☆☆)
13. 添加最少字符使字串整體都是回文字串(校★★★☆)
14. 括號字串的有效性和最長有效長度(原問題士★☆☆☆)(補充問題尉★★☆☆)
15.公式字串求值(校★★★☆)
16. 0 左邊必有1 的二進制字串數量(校★★★☆)
17. 拼接所有字串產生字典順序最小的大寫字串(校★★★☆)
18. 找到字串的最長無重復字符子串(尉★★☆☆)
19. 找到被指的新型別字符(士★☆☆☆)
20. 最小包含子串的長度(校★★★☆)
21. 回文最少分割數(尉★★★☆)
22. 字串匹配問題(校★★★☆)
23. 字典樹(前綴樹)的實作(尉★★☆☆)

程式員代碼面試指南-IT名企演算法與資料結構題目最優解:大資料和空間限制(6)
1. 認識布隆過濾器(尉★★☆☆)
2. 只用2 GB 記憶體在20 億個整數中找到出現次數最多的數(士★☆☆☆) .
3. 40 億個非負整數中找到沒出現的數(尉★★☆☆)
4. 找到100 億個URL 中重復的URL 以及搜索詞匯的top K 問題(士★☆☆☆)
5. 40 億個非負整數中找到出現兩次的數和所有數的中位數(尉★★☆☆)
6. 一致性哈希演算法的基本原理(尉★★☆☆)
程式員代碼面試指南-IT名企演算法與資料結構題目最優解:位運算(6)
1. 不用額外變數交換兩個整數的值(士★☆☆☆)
2. 不用任何比較判斷找出兩個數中較大的數(校★★★☆)
3. 只用位運算不用算術運算實作整數的加減乘除運算(尉★★☆☆)
4. 整數的二進制表達中有多少個1 (尉★★☆☆)
5. 在其他數都出現偶數次的陣列中找到出現奇數次的數(尉★★☆☆)
6. 在其他數都出現k 次的陣列中找到只出現一次的數(尉★★☆☆)
程式員代碼面試指南-IT名企演算法與資料結構題目最優解:陣列和矩陣問題(26)
1. 轉圈列印矩陣(士★☆☆☆)
2. 將正方形矩陣順時針轉動90 °(士★☆☆☆)
3. "之"字形列印矩陣(士★☆☆☆)
4. 找到無序陣列中最小的k 個數(O(Nlogk)的方法尉★★☆☆)(O(N)的方法將★★★★)
5. 需要排序的最短子陣列長度(士★☆☆☆)
6. 在陣列中找到出現次數大于N/K 的數(校★★★☆)
7. 在行列都排好序的矩陣中找數(士★☆☆☆)
8. 最長的可整合子陣列的長度(尉★★☆☆)
9. 不重復列印排序陣列中相加和為給定值的所有二元組和三元組(尉★★☆☆)
10. 未排序正數陣列中累加和為給定值的最長子陣列長度(尉★★☆☆)
11. 未排序陣列中累加和為給定值的最長子陣列系列問題(尉★★☆☆)
12. 未排序陣列中累加和小于或等于給定值的最長子陣列長度(校★★★☆)
13. 計算陣列的小和(校★★★☆)
14. 自然數陣列的排序(士★☆☆☆)
15. 奇數下標都是奇數或者偶數下標都是偶數(士★☆☆☆)
16. 子陣列的最大累加和問題(士★☆☆☆)
17. 子矩陣的最大累加和問題(尉★★☆☆)
18. 在陣列中找到一個區域最小的位置(尉★★☆☆)
19. 陣列中子陣列的最大累乘積(尉★★☆☆)
20. 列印N 個陣列整體最大的Top K(尉★★☆☆)
21. 邊界都是1 的最大正方形大小(尉★★☆☆)
22. 不包含本位置值的累乘陣列(士★☆☆☆)
23. 陣列的partition 調整(士★☆☆☆)
24. 求最短通路值(尉★★☆☆)
25. 陣列中未出現的最小正整數(尉★★☆☆)
26. 陣列排序之后相鄰數的最大差值(尉★★☆☆)

程式員代碼面試指南-IT名企演算法與資料結構題目最優解:其他問題(34)
1. 從5 隨機到7 隨機及其擴展(原問題尉★★☆☆補充問題尉★★☆☆)(進階問題校★★★☆)
2. 一行代碼求兩個數的最大公約數(士★★☆☆)
3. 有關階乘的兩個問題(原問題尉★★☆☆進階問題校★★★☆)
4. 判斷一個點是否在矩形內部(尉★★☆☆)
5. 判斷一個點是否在三角形內部(尉★★☆☆)
6. 折紙問題(尉★★☆☆)
7. 蓄水池演算法(尉★★☆☆)
8. 設計有setAll功能的哈希表(士★☆☆☆)
9. 最大的leftMax與rightMax之差的絕對值(校★★★☆)
10. 設計可以變更的快取結構(尉★★☆☆)
11. 設計RandomPool結構(尉★★☆☆)
12. 調整[0 ,x)區間上的數出現的概率(士★☆☆☆)
13. 路徑陣列變為統計陣列(校★★★☆)
14. 正數陣列的最小不可組成和(尉★★☆☆)
15. 一種字串和數字的對應關系(校★★★☆)
16. 1 到n 中1 出現的次數(校★★★☆)
17. 從N 個數中等概率列印M 個數(士★☆☆☆)
18. 判斷一個數是否是回文數(士★☆☆☆)
19. 在有序旋轉陣列中找到最小值(尉★★☆☆)
20. 在有序旋轉陣列中找到一個數(尉★★☆☆)
21. 數字的英文表達和中文表達(校★★★☆)
22. 分糖果問題(校★★★☆)
23. 一種訊息接收并列印的結構設計(尉★★☆☆)
24. 設計一個沒有擴容負擔的堆結構(將★★★★)
25. 隨時找到資料流的中位數(將★★★★)
26. 在兩個長度相等的排序陣列中找到上中位數(尉★★☆☆)
27. 在兩個排序陣列中找到第K 小的數(將★★★★)
28. 兩個有序陣列間相加和的TOP K 問題(尉★★☆☆)
29. 出現次數的TOP K 問題(原問題尉★★☆☆進階問題校★★★☆)
30. Manacher演算法(將★★★★)
31. KMP 演算法(將★★★★)
32. 丟棋子問題(校★★★☆)
33. 畫匠問題(校★★★☆)
34. 郵局選址問題(校★★★☆)

第三個:<演算法刷題LeetCode>
<演算法刷題LeetCode>應該是大家最熟悉不過的了,這里就不再過多的介紹,刷刷刷刷刷...

<演算法刷題LeetCode>

5.1 二叉樹的遍歷

第13章 動態規劃
Over!關于演算法,就到這兒了,關鍵還得多動手,刷刷刷起來!代碼敲起來!
<程式員代碼面試指南-IT名企演算法與資料結構題目最優解><演算法刷題LeetCode><演算法-第4版>等等都是刷題學習的好瑰寶,若是連這等最基本的都沒有,可以直接來找小編給你免費分享一下,點贊+關注,加助理VX:mxx2020666,免費領取
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/204190.html
標籤:其他
上一篇:div2 D. Extreme Subtraction
下一篇:三子棋游戲(C語言版)
