最熱的三伏天來了,相信有許多小伙伴們都已馬不停蹄的在準備各大廠的秋招提前批了吧,不知算法與數據結構會不會成為你的坎?
恰好,我這兩天花了點時間,整理了些各大廠(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!關于算法,就到這兒了,關鍵還得多動手,刷刷刷起來!代碼敲起來!