算法面試

李春葆、李筱馳

  • 出版商: 清華大學
  • 出版日期: 2024-10-01
  • 定價: $1,188
  • 售價: 8.5$1,010
  • 語言: 簡體中文
  • ISBN: 7302673985
  • ISBN-13: 9787302673989
  • 相關分類: 面試技巧
  • 下單後立即進貨 (約4週~6週)

  • 算法面試-preview-1
  • 算法面試-preview-2
  • 算法面試-preview-3
算法面試-preview-1

買這商品的人也買了...

相關主題

商品描述

"本書旨在幫助讀者更好地應對算法面試,提高算法和編程能力。書中按專題精選了LeetCode平臺的一系列的熱點算法題,並詳細解釋其求解思路和過程。全書分為三個部分,第Ⅰ部分為數據結構及其應用,以常用數據結構為主題,深入講解各種數據結構的應用方法和技巧。第Ⅱ部分為算法策略及其應用,以基本算法設計方法和算法設計策略為主題,深入講解各種算法設計策略的應用方法和技巧。第Ⅲ部分為經典問題及其求解,以實際中的一些問題為主題,深入講解這些問題多種求解方法。 本書適合於需要進行算法面試的讀者,通過閱讀本書可以掌握算法面試中求解問題的方法和技巧,提升自己的算法技能和思維方式,從而在面試中脫穎而出。同時可以作為《數據結構》和《算法設計與分析》課程的輔導書,也可以供各種程序設計競賽和電腦編程愛好者研習。 目錄 "

目錄大綱

目錄

掃一掃

配套資源

第一部分數據結構及其應用

第1章數組

1.1數組概述

1.1.1數組的定義

1.1.2數組的知識點

1.2數組的基本算法設計

1.2.1LeetCode27——移除元素★

1.2.2LeetCode283——移動0★

1.2.3LeetCode2460——對數組執行操作★

1.2.4LeetCode75——顏色的分類★★

1.2.5LeetCode189——輪轉數組★★

1.3有序數組的算法設計

1.3.1LeetCode26——刪除有序數組中的重復項★

1.3.2LeetCode80——刪除有序數組中的重復項Ⅱ★★

1.3.3LeetCode1287——有序數組中出現次數超過元素總數25%的

元素★

1.3.4LeetCode1200——最小絕對差★

1.3.5LeetCode88——合並兩個有序數組★

1.3.6LeetCode349——兩個數組的交集★

1.3.7LeetCode977——有序數組的平方★

1.3.8LeetCode1470——重新排列數組★

1.3.9LeetCode1213——3個有序數組的交集★

1.3.10LeetCode264——醜數Ⅱ★★

1.3.11LeetCode373——查找和最小的k對數字★★

推薦練習題

第2章鏈表

2.1鏈表概述

2.1.1鏈表的定義

2.1.2鏈表的知識點

2.2鏈表基本操作的算法設計

2.2.1LeetCode203——移除鏈表元素★

2.2.2LeetCode206——反轉鏈表★

2.2.3LeetCode328——奇偶鏈表★★

2.2.4LeetCode61——旋轉鏈表★★

2.2.5LeetCode141——環形鏈表★

2.2.6LeetCode138——復制帶隨機指針的鏈表★★

2.2.7LeetCode707——設計鏈表★★

2.3鏈表的分組算法設計

2.3.1LeetCode92——反轉鏈表Ⅱ★★

2.3.2LeetCode24——兩兩交換鏈表中的結點★★

2.3.3LeetCode25——k個一組翻轉鏈表★★★

2.4有序鏈表的算法設計

2.4.1LeetCode83——刪除排序鏈表中的重復元素★

2.4.2LeetCode82——刪除排序鏈表中的重復元素Ⅱ★★

2.4.3LeetCode21——合並兩個有序鏈表★

2.4.4LeetCode23——合並k個有序鏈表★★★

2.4.5LeetCode1634——求兩個多項式鏈表的和★★

推薦練習題

第3章棧

3.1棧概述

3.1.1棧的定義

3.1.2棧的知識點

3.2擴展棧的算法設計

3.2.1LeetCode1381——設計一個支持增量操作的棧★★

3.2.2LeetCode155——最小棧★

3.2.3LeetCode716——最大棧★★★

3.3棧應用的算法設計

3.3.1LeetCode1544——整理字符串★★

3.3.2LeetCode71——簡化路徑★★

3.3.3LeetCode1441——用棧操作構建數組★

3.3.4LeetCode946——驗證棧序列★★

3.3.5LeetCode20——有效的括號★

3.3.6LeetCode1249——刪除無效的括號★★

3.3.7LeetCode32——最長的有效括號子串的長度★★★

3.4單調棧應用的算法設計

3.4.1LeetCode503——下一個更大元素Ⅱ★★

3.4.2LeetCode496——下一個更大元素Ⅰ★

3.4.3LeetCode739——每日溫度★★

3.4.4LeetCode316——去除重復字母★★

3.4.5LeetCode84——柱狀圖中最大的矩形★★★

3.4.6LeetCode42——接雨水★★★

推薦練習題

第4章隊列和雙端隊列

4.1隊列和雙端隊列概述

4.1.1隊列和雙端隊列的定義

4.1.2隊列和雙端隊列的知識點

4.2擴展隊列的設計

4.2.1LeetCode622——設計循環隊列★★

4.2.2LeetCode641——設計循環雙端隊列★★

4.2.3LeetCode1670——設計前中後隊列★★

4.2.4LeetCode232——用棧實現隊列★

4.3隊列的應用

4.3.1LeetCode1700——無法吃午餐的學生的數量★

4.3.2LeetCode933——最近的請求次數★

4.3.3LeetCode225——用隊列實現棧★

4.3.4LeetCode281——鋸齒迭代器★★

4.3.5LeetCode1047——刪除字符串中所有的相鄰重復項★

4.4單調隊列

4.4.1LeetCode239——滑動窗口的最大值★★★

4.4.2LeetCode1438——絕對差不超過限制的最長連續子數組★★

4.4.3LCR184——設計自助結算系統★★

推薦練習題

第5章哈希表

5.1哈希表概述

5.1.1哈希表的定義

5.1.2哈希表的知識點

5.2哈希表的實現

5.2.1LeetCode705——設計哈希集合★

5.2.2LeetCode706——設計哈希映射★

5.3哈希集合應用的算法設計

5.3.1LeetCode349——兩個數組的交集★

5.3.2LeetCode202——快樂數★

5.3.3LeetCode217——存在重復元素★

5.3.4LeetCode379——電話目錄管理系統★★

5.3.5LeetCode128——最長連續序列★★

5.3.6LeetCode41——缺失的第一個正數★★★

5.3.7LeetCode1436——旅行終點站★

5.4哈希映射應用的算法設計

5.4.1LeetCode350——兩個數組的交集Ⅱ★

5.4.2LeetCode1460——通過翻轉子數組使兩個數組相等★

5.4.3LeetCode383——贖金信★

5.4.4LeetCode347——前k個高頻元素★★

5.4.5LeetCode242——有效的字母異位詞★

5.4.6LeetCode205——同構字符串★

5.4.7LeetCode1——兩數之和★

5.4.8LeetCode219——存在重復元素Ⅰ★

5.4.9LeetCode49——字母異位詞的分組★★

5.4.10LeetCode249——移位字符串的分組★★

推薦練習題

第6章二叉樹

6.1二叉樹概述

6.1.1二叉樹的定義

6.1.2二叉樹的知識點

6.2二叉樹先序、中序和後序遍歷應用的算法設計

6.2.1LeetCode144——二叉樹的先序遍歷★

6.2.2LeetCode94——二叉樹的中序遍歷★

6.2.3LeetCode145——二叉樹的後序遍歷★

6.2.4LeetCode965——單值二叉樹★

6.2.5LeetCode100——相同的樹★

6.2.6LeetCode572——另一棵樹的子樹★

6.2.7LeetCode543——二叉樹的直徑★

6.2.8LeetCode563——二叉樹的坡度★

6.2.9LeetCode2331——計算二叉樹的布爾運算值★

6.2.10LeetCode199——二叉樹的右視圖★★

6.2.11LeetCode662——二叉樹的最大寬度★★

6.3二叉樹層次遍歷應用的算法設計

6.3.1LeetCode102——二叉樹的層次遍歷★★

6.3.2LeetCode199——二叉樹的右視圖★★

6.3.3LeetCode637——二叉樹的層平均值★

6.3.4LeetCode2471——逐層排序二叉樹所需的最少操作數目★★

6.3.5LeetCode2415——反轉二叉樹的奇數層★★

6.3.6LeetCode1602——找二叉樹中最近的右側結點★★

6.4構造二叉樹的算法設計

6.4.1LeetCode105——由先序與中序遍歷序列構造二叉樹★★

6.4.2LeetCode106——由中序與後序遍歷序列構造二叉樹★★

6.4.3LeetCode2196——根據描述創建二叉樹★★

6.5二叉樹序列化的算法設計

6.5.1LeetCode297——二叉樹的序列化與反序列化★★★

6.5.2LeetCode100——相同的樹★

6.5.3LeetCode572——另一棵樹的子樹★

推薦練習題

第7章二叉搜索樹

7.1二叉搜索樹概述

7.1.1二叉搜索樹的定義

7.1.2二叉搜索樹的知識點

7.2二叉搜索樹基本操作的算法設計

7.2.1LeetCode1008——先序遍歷構造二叉搜索樹★★

7.2.2LeetCode700——二叉搜索樹中的搜索★

7.2.3LeetCode701——二叉搜索樹中的插入操作★★

7.2.4LeetCode450——刪除二叉搜索樹中的結點★★

7.3二叉搜索樹特性的算法設計

7.3.1LeetCode270——最接近的二叉搜索樹值★

7.3.2LeetCode235——二叉搜索樹的最近公共祖先★★

7.3.3LeetCode938——二叉搜索樹的範圍和★

7.3.4LeetCode669——修剪二叉搜索樹★★

7.3.5LeetCode776——拆分二叉搜索樹★★

7.3.6LeetCode285——二叉搜索樹中的中序後繼★★

7.3.7LeetCode255——驗證先序遍歷序列二叉搜索樹★★

7.4二叉搜索樹基於中序遍歷的算法設計

7.4.1LeetCode783——二叉搜索樹結點的最小距離★

7.4.2LeetCode230——二叉搜索樹中第k小的元素★★

7.4.3LeetCode98——驗證二叉搜索樹★★

7.4.4LeetCode538——把二叉搜索樹轉換為累加樹★★

7.4.5LeetCode99——恢復二叉搜索樹★★

7.4.6LeetCode173——二叉搜索樹迭代器★★

7.4.7LeetCode272——最接近的二叉搜索樹值Ⅱ★★★

推薦練習題

第8章平衡二叉樹

8.1平衡二叉樹概述

8.1.1平衡二叉樹的定義

8.1.2平衡二叉樹的知識點

8.2構造平衡二叉樹的算法設計

8.2.1LeetCode108——將有序數組轉換為平衡二叉樹★

8.2.2LeetCode109——將有序鏈表轉換為平衡二叉樹★★

8.2.3LeetCode1382——將二叉搜索樹轉換為平衡二叉樹★★

8.3平衡樹集合應用的算法設計

8.3.1LeetCode506——相對名次★

8.3.2LeetCode414——第三大的數★

8.3.3LeetCode855——考場就座★★

8.3.4LeetCode2353——設計食物評分系統★★

8.4平衡樹映射應用的算法設計

8.4.1LeetCode846——一手順子★★

8.4.2LeetCode981——基於時間的鍵值存儲★★

8.4.3LeetCode1912——設計電影租借系統★★★

推薦練習題

第9章優先隊列

9.1優先隊列概述

9.1.1優先隊列的定義

9.1.2優先隊列的知識點

9.2優先隊列的實現

9.2.1LeetCode912——排序數組★★

9.2.2LeetCode215——數組中第k個最大的元素★★

9.2.3LeetCode506——相對名次★

9.3優先隊列應用的算法設計

9.3.1LeetCode703——數據流中第k大的元素★

9.3.2LeetCode373——查找和最小的k對數字★★

9.3.3LeetCode23——合並k個有序鏈表★★★

9.3.4LeetCode239——滑動窗口的最大值★★★

9.3.5LeetCode1383——最大的團隊表現值★★★

9.3.6LeetCode2462——雇傭k位工人的總代價★★

推薦練習題

第10章並查集

10.1並查集概述

10.1.1並查集的定義

10.1.2並查集的實現

10.1.3帶權並查集

10.2一維並查集應用的算法設計

10.2.1LeetCode261——以圖判樹★★

10.2.2LeetCode323——無向圖中連通分量的數目★★

10.2.3LeetCode684——冗餘連接★★

10.2.4LeetCode785——判斷二分圖★★

10.2.5LeetCode990——等式方程的可滿足性★★

10.2.6LeetCode1061——按字典序排列最小的等價字符串★★

10.2.7LeetCode947——移除最多的同行或同列石頭★★

10.3二維並查集

10.3.1LeetCode200——島嶼的數量★★

10.3.2LeetCode1559——在二維網格圖中探測環★★

10.4帶權並查集

10.4.1LeetCode695——最大島嶼的面積★★

10.4.2LeetCode128——最長連續序列★★

10.4.3LeetCode1254——統計封閉島嶼的數目★★

10.4.4LeetCode399——除法求值★★

推薦練習題

第11章前綴和與差分

11.1前綴和與差分概述

11.1.1前綴和

11.1.2差分

11.2一維前綴和應用的算法設計

11.2.1LeetCode724——尋找數組的中心下標★

11.2.2LeetCode238——除自身以外數組的乘積★★

11.2.3LeetCode1749——任意子數組和的絕對值的最大值★★

11.2.4LeetCode1524——和為奇數的子數組的數目★★

11.2.5LeetCode560——和為k的子數組★★

11.2.6LeetCode325——和等於k的最長子數組的長度★★

11.2.7LeetCode523——連續子數組和★★

11.2.8LeetCode53——最大子數組和★★

11.3二維前綴和應用的算法設計

11.3.1LeetCode304——二維區域和檢索(矩陣不可變)★★

11.3.2LeetCode1074——元素和為目標值的子矩陣的數量★★★

11.3.3面試題17.24——最大子矩陣★★★

11.4差分數組應用的算法設計

11.4.1LeetCode370——區間加法★★

11.4.2LeetCode1109——航班預訂統計★★

11.4.3LeetCode2536——子矩陣元素加1★★

推薦練習題

第12章線段樹

12.1線段樹概述

12.1.1線段樹的定義

12.1.2簡單線段樹的實現

12.1.3復雜線段樹的實現

12.1.4線段樹的動態開點實現

12.1.5離散化

12.2簡單線段樹應用的算法設計

12.2.1LeetCode303——區域和檢索(數組不可變)★

12.2.2LeetCode308——二維區域和檢索(可改)★★★

12.2.3LeetCode327——區間和的個數★★★

12.3復雜線段樹應用的算法設計

12.3.1LeetCode715——Range模塊★★★

12.3.2LeetCode1622——奇妙序列★★★

12.4離散化在線段樹中的應用

12.4.1LeetCode327——區間和的個數★★★

12.4.2LeetCode315——計算右側小於當前元素的個數★★★

推薦練習題

第13章樹狀數組

13.1樹狀數組概述

13.1.1樹狀數組的定義

13.1.2樹狀數組的實現

13.2樹狀數組應用的算法設計

13.2.1LeetCode1649——通過指令創建有序數組★★★

13.2.2LeetCode1409——查詢帶鍵的排列★★

13.2.3LeetCode683——k個關閉的燈泡★★★

13.2.4LeetCode308——二維區域和檢索(可改)★★★

13.3離散化在樹狀數組中的應用

13.3.1LeetCode327——區間和的個數★★★

13.3.2LeetCode315——計算右側小於當前元素的個數★★★

推薦練習題

第14章字典樹和後綴數組

14.1字典樹和後綴數組概述

14.1.1字典樹

14.1.2後綴數組

14.2字典樹應用的算法設計

14.2.1LeetCode208——實現Trie(前綴樹)★★

14.2.2LeetCode14——最長公共前綴★

14.2.3LeetCode648——單詞替換★★

14.2.4LeetCode677——鍵值映射★★

14.2.5LeetCode792——匹配子序列的單詞數★★

14.3後綴數組應用的算法設計

14.3.1LeetCode1698——字符串的不同子串的個數★★

14.3.2LeetCode1044——最長重復子串★★★

推薦練習題