數組
順時針打印矩陣(順時針螺旋打印二維數組)
把數組排成最小的數(思維排序,Comparator)
第一個只出現一次的字符(hashmap/桶計數)
數組中只出現一次的數字(HashMap)
數組中重複的數字(HashMap/桶計數)
和爲S的兩個數字(雙指針)
撲克牌順子(判定模擬)
構建乘積數組(前綴積、後綴積)
字符流中第一個不重複的字符(HashMap/桶計數)
模擬
把字符串轉換成整數(模擬,注意防止溢出)
表示數值的字符串(判斷類模擬)
數組中的查找(二分思想)
二維數組中的查找(二分思想)
旋轉數組的最小數字(二分)
數字在排序數組中出現的次數(兩次二分)
字符串
替換空格(StringBuffer、String語法 replace)
字符串的排列(字符串的全排列,next_permutation實現)
左旋轉字符串(substring拼接)
翻轉單詞順序列(split分割)
鏈表
從尾到頭打印鏈表(ArrayList)
鏈表中倒數第k個結點(快慢指針)
反轉鏈表(頭插法)
合併兩個排序的鏈表(尾插法)
複雜鏈表的複製(三步法:複製、賦值、拆鏈
兩個鏈表的第一個公共結點(神仙思路)
鏈表中環的入口節點(數學推導+雙指針)
刪除鏈表中重複的結點(頭結點+雙指針)
樹
重建二叉樹(先序中序還原樹)
二叉搜索樹的後序遍歷序列(遞歸判定)
二叉樹中和爲某一值的路徑(dfs,二維ArrayList及其排序)
二叉搜索樹與雙向鏈表(妙,右根左的中序遍歷)
二叉樹的深度(dfs)
平衡二叉樹(簡單判斷,左右子樹高度差不超過1)
二叉樹的下一個結點(模擬)
對稱的二叉樹(遞歸判定)
把二叉樹打印成多行(層序遍歷)
按之字形順序打印二叉樹(層序遍歷)
序列化二叉樹(先序遍歷序列化,遞歸反序列化)
棧、隊列
用兩個棧實現隊列
棧的壓入、彈出序列(按照彈出序列模擬棧的彈出)
堆、優先級隊列、單調隊列
數據流中的中位數(兩個堆)
滑動窗口的最大值(單調隊列)
排序
數組中的逆序對(歸併排序)
二叉樹中和爲某一值的路徑(dfs,二維ArrayList及其排序)
把數組排成最小的數(思維排序,Comparator)
字符串的排列(字符串的全排列,next_permutation實現)
數學、位運算、邏輯運算
二進制中1的個數(位運算n&(n-1))
整數中1出現的次數(從1到n整數中1出現的次數)
醜數(思維,枚舉)
和爲S的連續正數序列(數學+枚舉)
求1+2+3+…+n(&&的短路原理)
不用加減乘除做加法(位運算)
遞歸、dfs
孩子們的遊戲(圓圈中最後剩下的數) (約瑟夫環,遞歸)
正則表達式匹配(遞歸判定)
矩陣中的路徑(dfs)
思維
變態跳臺階(思維/數學推導)
矩形覆蓋(思維,斐波那契數列)