最熱的三伏天來了,相信有許多小伙伴們都已馬不停蹄的在準(zhǔn)備各大廠的秋招提前批了吧,不知算法與數(shù)據(jù)結(jié)構(gòu)會不會成為你的坎?
恰好,我這兩天花了點時間,整理了些各大廠(google+百度+Alibaba+字節(jié)+Tencent+網(wǎng)易+360+拼夕夕+美團+小米)面試過程中的一些算法題,不來試個水測試一下自己?

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

算法血拼:<程序員代碼面試指南-IT名企算法與數(shù)據(jù)結(jié)構(gòu)題目最優(yōu)解><算法刷題LeetCode><算法-第4版>
[算法血拼相關(guān)的算法刷題與筆記]等早已整理存放在一個文件夾里了,若是有所需求,那就直接來轉(zhuǎn)發(fā)+私信小編【算法】給你免費分享原件就是了。

第一個:<算法-第4版>
作為算法領(lǐng)域經(jīng)典的參考書,全面介紹了關(guān)于算法和數(shù)據(jù)結(jié)構(gòu)的必備知識,并特別針對排序、搜索、圖處理和字符串處理進行了論述。第 4 版具體給出了每位程序員應(yīng)知應(yīng)會的 50 個算法,提供了實際代碼,而且這些 JAVA 代碼實現(xiàn)采用了模塊化的編程風(fēng)格,讀者可以方便地加以改造



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

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

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

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

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

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

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

<算法刷題LeetCode>

5.1 二叉樹的遍歷

第13章 動態(tài)規(guī)劃
Over!關(guān)于算法,就到這兒了,關(guān)鍵還得多動手,刷刷刷起來!代碼敲起來!