前言
“人工智能”,“機器學習”,“大資料”,這些越來越常聽到的字眼,背后其實都是一個個“演算法”,諸多高新科技,似乎都離不開“演算法”的“加持”,無論是什么語言,什么方向,學習演算法是一件非常有必要的事情,
現在很多互聯網公司面試都會問到演算法題,以騰訊、位元組跳動為代表,尤其是對于應屆生來說,演算法是必問的知識點之一,所以,今天總結了2020年,截止到目前為止,常問到的一些演算法題,希望能夠對你接下來的面試有所幫助,
點此獲取更多演算法面試題以及更多學習資料!!
此外,有一道題我沒有在leetcode上找到的題,頻繁考察,大家注意下,
題目描述:一個鏈表,奇數位升序偶數位降序,讓鏈表變成升序的, 比如:1 8 3 6 5 4 7 2 9,最后輸出1 2 3 4 5 6 7 8 9,

注意:下文內容以崗位進行了區分,很多演算法內容雖是相通的,但不同崗位有不同側重,這些演算法題,我也一一整理在檔案內,標注好了是LeetCode多少題,需要我分享pdf的,可以私信口令「演算法」免費獲取,
Java崗
- 劍指 Offer 53 - II. 0~n-1中缺失的數字
- 如何判斷一個單鏈表是不是有環
- 給你一個陣列,求三個數字之和為100.
- 1243534543634交換各位的數字,找出大于目前這個數的最小的一個數,
- 對一個奇數位升序,偶數位降序的鏈表,進行排序,例如 1->100->20->80->40->30
- 演算法題:(1)設計sqtr(x)
- 演算法題:(1)判斷回文鏈表
- 對于給定的資料,找出比這個數大的最小回文數(正反讀都一樣的數),如 12310 -> 12321
- 第一道代碼:陣列只交換一次求最大
- 第二道代碼: 單鏈表判斷是否有環
- 括號匹配
- 鏈表每k個翻轉
- 判斷單鏈表有沒有環,有的話找入口
- 給定m和n,輸出從1~n中任意多個數字,且和為mu的組合(數字不能重復使用)
- 演算法題(求第n個丑數,leetcode原題,難度mid)
- 第一題是求開根號n的值
- 第二題是輸出交錯后的鏈表(比如鏈表a-b-c-d-e,交錯后輸出為a-e-b-d-c)
- 反轉鏈表
- 找峰值
- 2*N的格子 1*2的格子填滿它有多少種方法, 給個陣列,找出右邊第一個比它大的元素, 鏈表兩兩反轉
- 手撕代碼:Z字型遍歷二叉樹(劍指offer原題,LeetCode第1553題)
- 演算法題1:很大量的int型數,輸出前100最大的數(中等)
- 演算法題2:單向鏈表,頭尾奇偶交替輸出(中等)
- 單鏈表反轉
- 平衡二叉搜索樹插入演算法
- 演算法:擲骰子走路,1~6,給定的輸入n,走到第n個格子有多少種走法
- 演算法:青蛙跳格子,陣列里元素表示該位置石頭個數,每次跳3-5格,問跳出陣列最少踩多少石頭,
- 演算法:給定鏈表和k,要求每k個元素翻轉一次
- 演算法:找出陣列里出現次數大于n/k的數
- 演算法判斷樹是否對稱,用bfs做了
- 第二題:二叉樹的左視圖
- 第一題,一個int陣列,找出兩個異或最大的數字,時間要求O(n)
- 第二題,四個int陣列,從每個陣列里邊挑一個數,加起來等于指定數,要求列印出所有非重復的組合,要求最大n2,
- 代碼題:不含重復字符的最長子串(leetcode原題)
- 最長上升子序列的狀態轉移,時間復雜度
- 給出前序和中序陣列,生成后序陣列
- 演算法題:給一棵二叉樹和一個整數,要求輸出二叉樹中路徑和等于這個整數的路徑
- 演算法題,兩個鏈表了型別的整數求和,如1->2->5與3->6求和得到1->4->1,用堆疊或者反轉鏈表,
- 演算法題:找波谷數;
- 演算法題:復制帶隨機指標的單向鏈表;
- 演算法題:找到兩個鏈表的公共節點
- 給定兩個單鏈表,判斷是否有公共節點
- 求字符陣列的全排列
- 查找有序陣列中一個目標值出現的第一次位置,沒有找到回傳 -1
- 演算法:滑動視窗尋找滿足的字串
- 爬樓梯
- 說思路:實作一個堆疊,o(1)時間找最大值
- 寫代碼:矩陣從左上到右下找最小路徑
- 說思路:洗掉單鏈表的倒數第k個節點
- 01矩陣最大正方形,經典題了,dp選左上最小+1,隨便寫了一下,沒讓跑test,
- 二叉樹找target路徑
- 二叉樹轉單鏈表,常規題,遞回一下完事了,
- 演算法題:從左上角走到右下角有多少種不同的路線
- 兩個有序鏈表合并
- 給定2D矩陣,求里面1構成的正方形的最大面積,
- 演算法題:接雨水
- 拋硬幣(一個0.3 一個0.7 如何保證公平)
- z字形列印二叉樹
- 一顆搜索二叉樹有兩個節點是顛倒的,恢復成正確的
- 單鏈表高位在前、低位在后,大數計算
- 階乘
- 一個有序、有重復元素陣列找到有多少滿足 a + b = target的
- 手撕:層序遍歷
- 二叉樹中序遍歷
- 手撕 lru
- 字串轉換為整數,leetcode第67題
- 先問兩個無序陣列怎么找交集,
- 演算法題,最長連續相同字符的子串
- 寫個題,每K個節點翻轉鏈表
- 字串全排列
- 二叉樹的最大路徑和
- 類似于并查集的問題,最終求連通分量的數量
- 回文串判斷
- 二叉搜索樹轉鏈表
- 二叉樹求和leetcode129-講一下時間復雜度
- 求鏈表的倒數第k個節點
- 序列化和反序列化二叉樹
- 求陣列的極值點,找出一個滿足的就行(二分查找)
- 前序遍歷和中序遍歷重構二叉樹 (不給用HashMap 好在做出來了)
- 演算法題:判斷回文鏈表(中間拆分兩條鏈表 后面的反轉鏈表 對比數值是否相等)
- 演算法題:奇數位升序偶數位降序的鏈表要求時間O(n)空間O(1)的排序?(奇偶拆分 偶鏈反轉 歸并merge)
- 手撕代碼:鏈表加法
- 鏈表的兩兩翻轉
- LRu
- 一面:最大連續子序列和和回文鏈表
- 二面:一個奇數位升序、偶數位降序的單向無環鏈表,排成一個有序鏈表
- 三面:S型列印二叉樹,兩條單向鏈表的相交節點,任意陣列中的第一個缺失的正整數
- 第一題 判斷是否回文鏈表
- 第二題 求逆數對
- 第三題 動態規劃
- 最大化股票交易
- 最大化股票交易(有限交易)
- 滑動視窗匹配字串
- 大數問題中的topK問題
- 給整數陣列做數字次數統計,答unordered_map,讓我再想其他方法,不會,
- 給你一個陣列和一個target,找出和是target整數倍的連續子串
- 一個括號字串,找出最長合法長度

點此獲取更多演算法面試題以及更多學習資料!!
C++客戶端
- 演算法題(合并鏈表
- 求島嶼個數
- 樹找兩節點最長距離
- leetcode原題 從一個數 l 一直 與 操作到 r ,怎么做最快,復雜度最小
- k個一組反轉鏈表
- 二叉樹的非遞回后序遍歷
- 按字典序全排列輸出
- 跳臺階
- 有兩個單鏈表,其有交叉節點,求交叉節點,
- LRU演算法,給一個整數陣列,若LRU的視窗大小是4,求下一個元素進來后剔除哪個元素,
- 求最小子陣列,leetcode209題,
- 給定一個int陣列A,陣列中元素互不重復,給定一個數x,求所有求和能得到x的數字組合,組合中的元素來自A,可重復使用,
- 一個二叉樹, 求路徑之和,
- 手撕代碼:1)給定陣列,求連續子串的最大和
- 用兩個堆疊實作佇列
- 手撕代碼:1)給定一個二維陣列,從左到右,從上到下都是遞增的,查找某個元素;2)給定一個矩陣,每次只能向右或向下走,從左上角開始到右下角一共有多少種走法
- 第一題就是給一個矩陣,從右上角往左下角一層一層斜著遍歷,類似于這樣:
- 層次遍歷二叉樹
- 給一個正整數,表示成一個或多個不同的正整數的和,輸出所有的解決方案(深搜,但是我實作的時候寫的不好)
- 給一個n*n的方陣,螺旋填入數字
- 編程:判斷兩個鏈表是否相交并回傳交點;
- LeetCode 25. K個一組反轉鏈表
- LeetCode 53.最大子序和
- 給定一個包含大寫英文字母和數字的句子,找出這個句子所包含的最大的十六進制整數,回傳這個整數的值,資料保證該整數在int表示范圍內,
- 字串陣列兩個字串的最小距離(easy)
- 做題,陣列中和最大的連續子陣列(mid)
- 手撕 無序陣列兩數之和
- 手撕代碼 兩個堆疊實作佇列
- 手撕代碼 實作洗牌演算法
- 簡化路徑(演算法題)
- 二叉樹的右視圖(演算法題)
- 手撕代碼:從無序陣列中找到右邊第一個大的數
- 兩兩反轉鏈表
- 演算法:判斷兩個鏈表是否相交
- 演算法:查找二叉樹中兩個節點的最近公共祖先
- 手撕代碼 求m個數中最大的n個數
- 演算法題 鏡像二叉樹
- 先升后降陣列,找峰值的坐標,二分法
- 給一個分數n/m,如果這個分數是無線回圈小數,找出回圈位,
- 判斷二叉樹是否鏡像

測驗崗
- 撕代碼環節:題目為leetcode第三題,求最長連續不含重復字符子串
- 代碼:駝峰字串問題
- 用String存兩個很長的數,求和
- 求二叉樹最大長度
- 兩個大數字串求和輸出字串
- 對含有重復數字的陣列去重并排序,手撕快排
- 演算法:回傳一棵樹的最大葉節點距離
- 手撕代碼:駝峰陣列最大值
- 手撕代碼:求一個陣列的所有子集
- 二叉樹遍歷
- 平衡二叉樹
- 代碼:判斷回文
- 代碼:鏈表的逆序輸出
- 演算法:兩個鏈表找公共節點
- 演算法:求陣列中升序的子序列
- 代碼:無重復最長字串
- 二維有序陣列(從左到右遞增,從上到下也遞增),找目標數(我寫的二分法)
- 求子集

點此獲取更多演算法面試題以及更多學習資料!!
演算法崗
- 子序最大和(要求子序列長度大于等于k)
- 一個list,一個target,求list中兩數之和等于target的所有組合,list中有重復的,算medium吧,
- 用兩個堆疊實作一個佇列
- 判斷給定序列是否為二叉搜索樹的前序遍歷
- 給定一個陣列,求連續子序列乘積為完全平方數的最大長度
- 合并陣列
- 鏈表找環
- 第K大個數
- 求和為k的子陣列個數
- 判斷是否存在個數超過陣列長度一半的數
- 二叉樹子路徑和為k的路徑個數
- 給一個類似樹的結構,每個節點都可以有多個節點(不止兩個樹)然后每個根節點和位元組點間的路徑不一樣,求葉子結點到葉子結點的最大路徑
- 判斷左右括號是否合理
- 樸素貝葉斯的演算法實作
- 兩個很大的資料集存著url 找到兩個資料集共有的url
- 一個二維矩陣由小到大排列,找target數字
- 二叉樹按行輸出
- 給二叉樹前序遍歷和中序遍歷 輸出這個樹
- 翻轉鏈表

前端
- 洗掉鏈表的倒數第n個
- leetcode 93
- 二叉樹層序遍歷
- Merge 兩個有序的鏈表
- 找出兩個鏈表的交叉點
- 斐波那契 遞回實作/dp實作/空間優化
- 演算法題:找出sum大于等于target的最短連續陣列的長度,要通過所有測驗資料
- 演算法:合并有序陣列
- 演算法:逆序輸出數字,
- 演算法題:陣列去重
- 爬樓梯
- 二叉樹所有根到葉子節點路徑上所有節點,組成的數字之和
- 演算法題:判斷給定的一棵樹是否是 二叉查找樹
- 演算法題:給定一個數字陣列,以及數字出現次數
- 輸出陣列第k大元素
- 實作斐波納西數列

大資料
- 演算法題1: 請對3個有序陣列進行歸并排序
- 演算法題2: 求一個字串中最長不重復子串的長度
ios
- 演算法題:求k大數
- leetcode1 兩數之和
- 劍指offer 62 圓圈中剩下的數字(約瑟夫環問題)
- leetcode 41 缺失的第一個正數
- 如何用兩個堆疊實作一個佇列?如何優化前面說的那種思路?
- 編程題:上臺階(那個簡單的fabonacci)然后就又來了一道
- 編程題:區間合并求并集
- 演算法題:連續子陣列的最大和
- 二分查找在升序陣列中找出絕對值最小的那個數
- 8個桶(每個桶只能放一個球),5個球,三個連續的情況有幾種,一般情況下呢?
- ......


Andriod
- 演算法題:根據前中序重構二叉樹
- 演算法:螺旋矩陣
- 代碼題:旋轉陣列
- 代碼題:兩數相加(鏈表,要求原地實作,空間復雜度O(1)
- 代碼題:a) 螺旋遍歷矩陣;b)(變種)原地旋轉影像
我的演算法必備資料
- 演算法刷題LeetCode:


- 演算法的樂趣:



- 演算法(詳解版):



總結
解決同一個問題,可能有各種各樣的演算法,不同的演算法,可能執行速度不同,可能撰寫難易度不同,可能占用的資源不同,甚至可能計算準確度都不同;很多時候并沒有最好的演算法,只有在特定條件下最適合的演算法,所以,關于演算法的學習,我們要學會舉一反三,
以上的演算法資料均整理成PDF
點此獲取更多演算法面試題以及更多學習資料!!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/229079.html
標籤:AI
