Java 100道演算法
李荣先辈Java發表於2024-08-13
陣列相關
- 查詢陣列中的最大和最小元素
- 實現陣列的反轉
- 查詢陣列中的第二大元素
- 從陣列中刪除重複元素
- 合併兩個有序陣列
- 找到陣列中和為指定值的兩個數
- 實現一個動態陣列(ArrayList)
- 找到陣列中出現次數超過一半的元素
- 尋找陣列的連續子陣列和為定值
- 查詢陣列中的峰值元素
字串相關
- 實現字串的反轉
- 判斷一個字串是否為迴文
- 統計字串中每個字元的出現次數
- 查詢字串中的第一個不重複字元
- 實現字串的全排列
- 查詢兩個字串的最長公共子串
- 判斷兩個字串是否為異位詞
- 實現字串的匹配(KMP演算法)
- 壓縮字串
- 計算兩個字串的編輯距離
連結串列相關
- 反轉連結串列
- 查詢連結串列的中間節點
- 刪除連結串列中的重複節點
- 合併兩個有序連結串列
- 檢查連結串列是否有環
- 刪除連結串列中的倒數第N個節點
- 在連結串列中找到環的入口點
- 對連結串列進行排序
- 合併K個有序連結串列
- 交換連結串列中的相鄰節點
樹相關
- 實現二叉樹的前序遍歷
- 實現二叉樹的中序遍歷
- 實現二叉樹的後序遍歷
- 實現二叉樹的層序遍歷
- 查詢二叉樹的最大深度
- 判斷一棵樹是否為二叉搜尋樹
- 查詢二叉搜尋樹的最小值和最大值
- 查詢二叉樹的最近公共祖先
- 求二叉樹的所有路徑
- 將二叉搜尋樹轉換為雙向連結串列
排序和搜尋
- 實現氣泡排序
- 實現選擇排序
- 實現插入排序
- 實現歸併排序
- 實現快速排序
- 實現堆排序
- 實現二分查詢
- 在旋轉排序陣列中查詢目標值
- 查詢第K大的元素
- 查詢缺失的數字
動態規劃
- 斐波那契數列
- 求解揹包問題
- 找到陣列中的最長遞增子序列
- 找到兩個字串的最長公共子序列
- 找到硬幣組合的最小數目
- 判斷是否能分割陣列為和相等的兩部分
- 最長迴文子串
- 不同路徑數量
- 編輯距離
- 房屋偷盜問題
數學問題
- 計算階乘
- 判斷一個數是否為質數
- 計算兩個數的最大公約數
- 實現一個冪函式
- 判斷一個數是否為迴文數
- 找到一個數的平方根
- 計算兩個數的最小公倍數
- 判斷一個數是否為醜數
- 求解楊輝三角形
- 找到一個數的所有因子
其他
- 實現LRU快取機制
- 查詢圖中的連通分量
- 實現深度優先搜尋(DFS)
- 實現廣度優先搜尋(BFS)
- 判斷兩個二叉樹是否相同
- 找到二叉樹中的所有葉子節點
- 計算二叉樹的直徑
- 生成括號的所有合法組合
- 找到N皇后問題的所有解
- 求解漢諾塔問題
- 實現一個執行緒安全的單例模式
- 實現一個生產者-消費者模型
- 計算陣列中逆序對的數量
- 檢查字串中的括號是否匹配
- 實現字串的全組合
- 查詢連結串列中的倒數第K個節點
- 實現連結串列的分割槽
- 判斷一個連結串列是否為迴文連結串列
- 實現一個佇列(FIFO)
- 實現一個棧(LIFO)
- 找到陣列中的第一個缺失正數
- 找到N個數中出現次數超過N/3的元素
- 在矩陣中找到目標值
- 查詢最長的無重複字元的子串
- 查詢陣列中連續子陣列的最大和
- 查詢二維矩陣中的峰值
- 找到一個字串中所有異位詞的起始索引
- 實現Trie(字首樹)
- 實現最短路徑演算法(如Dijkstra演算法)
- 解決約瑟夫環問題