ghy

ghy

aha~

刷算法題-捲起來

RT。

大環境不景氣,為了生活,必須好好學習了 📚📖

一天一道算法題#

1.【鏈表中倒數第 k 個節點】兩個指針,a=0, b=k,一起向前移動,當 k 取值 = null 時,a=n-k。

  • 【二叉搜索樹中第 K 小的元素】中序遍歷,k--
  • 【數組中的第 K 個最大元素】快速排序,不需要排序,只需要比較。

2.【全排列】遞歸 (DFS), 依次取數組元素,除去當前元素再分別遞歸取數組元素 (兩 for 循環 + 遞歸)

3.【反轉鏈表】一次循環 {prev=null,cur=0, next=temp}, 當 next = null 時,結束 while 循環

4.【二叉樹的層序遍歷】廣度優先 BFS:while 同級遍歷 (隊列 shift) & 收集下一層節點 (push)

5.【螺旋矩陣】巧技:削蘋果。削掉最外面一層 (shift 數組及其餘數組 pop),翻轉整個數組 180 度 ([].reverse),再削。

6.【復原 IP 地址】分割字符串,遞歸 (dfs), 檢查每一段是否合法 0~255

7.【島嶼數量】每遇到陸地格子 = 1, 則 DFS 搜索,標記已搜索過的格子 (標記為 2)。

8.【N 叉樹的層序遍歷】BFS 廣度優先遍歷 root-->nextRoot []-->nextRoot []

9.【翻轉二叉樹】前、後序 DFS 深度遍歷 or BFS 廣度優先遍歷,不能用中序 (會翻轉兩次)

10.【最長回文子串】https://writings.sh/post/algorithm-longest-palindromic-substring

11.【最長不含重複字符的子字符串】動態規劃 + hashMap

12.【二叉樹的最近公共祖先】思路 1(二叉遍歷) 算出路徑,然後對比兩個路徑的分叉點;

  • 思路 2: 兩個值都在左邊,則最近 root 在左邊;一左一右,則當前 root 就是最近公共祖先。

13.【旋轉圖像】兩個 for,置換 matrix [j][n - 1- i] = matrix [i][j]

14.【無重複字符的最長子串】滑塊 ->map 標識字符位置,max 標識當前最大位置

15.【合併兩個有序數組】雙指針,依次比較放入到一個新數組

16.【求根到葉子節點數字之和】dfs 算法,標記已訪問過的子節點 (左 or 右)

17.【路徑總和】dfs 算法,標記已訪問過的子節點 (左 or 右)

18.【最大子序和】 單循環下,curSum <0 則捨棄 & 重新累加,curSum>maxSum && maxSum = curSum

19.【兩數之和】建一個 map,放入 index 和 value,順便比對下已放入的是否可以配對

  • 【三數之和】2. 雙指針法:排序數組 & 選定 [a,b,c] = [i,i+1,len-1],target=-num [i]

20.【數組中的第 K 個最大元素】快排法 (選擇一個基準 p,小於 p 移到左邊,大於 p 移到右邊),從 i=0 指針移動,如果當前指針 i=k,則 return

21.【長度最小的子數組】 滑塊 ->map 標識字符位置

22.【字符串相加】轉數組 & 反序 reverse,滿 10 進 1

23.【二叉樹的最大深度】前序遍歷
24.【LRU 算法】new Map (),map 是一個散列隊列,set 總是到隊列最後一個


一些資料#

  • 字節算法面試題:github.com/afatcoder/LeetcodeTop/blob/master/bytedance/frontend.md
  • leetcode Top: github.com/afatcoder/LeetcodeTop
  • 看完這篇,你會理解圖和樹的遍歷: https://zhuanlan.zhihu.com/p/98406357
  • 二叉樹遍歷: github.com/liusaint/ls-blog/issues/25

待續

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。