劍指offer彙總

數組

調整數組順序使奇數位於偶數前面(簡單操作)

順時針打印矩陣(順時針螺旋打印二維數組)

把數組排成最小的數(思維排序,Comparator)

第一個只出現一次的字符(hashmap/桶計數)
數組中只出現一次的數字(HashMap)
數組中重複的數字(HashMap/桶計數)
和爲S的兩個數字(雙指針)
撲克牌順子(判定模擬)
構建乘積數組(前綴積、後綴積)

字符流中第一個不重複的字符(HashMap/桶計數)

模擬

把字符串轉換成整數(模擬,注意防止溢出)

表示數值的字符串(判斷類模擬)

數組中的查找(二分思想)

二維數組中的查找(二分思想)

旋轉數組的最小數字(二分)

數字在排序數組中出現的次數(兩次二分)

字符串

替換空格(StringBuffer、String語法 replace)

字符串的排列(字符串的全排列,next_permutation實現)

左旋轉字符串(substring拼接)
翻轉單詞順序列(split分割)

鏈表

從尾到頭打印鏈表(ArrayList)
鏈表中倒數第k個結點(快慢指針)
反轉鏈表(頭插法)
合併兩個排序的鏈表(尾插法)

複雜鏈表的複製(三步法:複製、賦值、拆鏈

兩個鏈表的第一個公共結點(神仙思路)

鏈表中環的入口節點(數學推導+雙指針)

刪除鏈表中重複的結點(頭結點+雙指針)

重建二叉樹(先序中序還原樹)

樹的子結構(遞歸判定)

二叉樹的鏡像(遞歸操作)

從上往下打印二叉樹(層序遍歷,一維的輸出)

二叉搜索樹的後序遍歷序列(遞歸判定)

二叉樹中和爲某一值的路徑(dfs,二維ArrayList及其排序)

二叉搜索樹與雙向鏈表(妙,右根左的中序遍歷)

二叉樹的深度(dfs)
平衡二叉樹(簡單判斷,左右子樹高度差不超過1)

二叉樹的下一個結點(模擬)

對稱的二叉樹(遞歸判定)

把二叉樹打印成多行(層序遍歷)

按之字形順序打印二叉樹(層序遍歷)

序列化二叉樹(先序遍歷序列化,遞歸反序列化)

二叉搜索樹的第k個結點(中序遍歷)

棧、隊列

用兩個棧實現隊列

包含min函數的棧(棧模擬,構造一個最小值的棧)

棧的壓入、彈出序列(按照彈出序列模擬棧的彈出)

堆、優先級隊列、單調隊列

最小的K個數(優先級隊列)

數據流中的中位數(兩個堆)

滑動窗口的最大值(單調隊列)

排序

數組中的逆序對(歸併排序)

二叉樹中和爲某一值的路徑(dfs,二維ArrayList及其排序)

把數組排成最小的數(思維排序,Comparator)

字符串的排列(字符串的全排列,next_permutation實現)

數學、位運算、邏輯運算

斐波那契數列
跳臺階(斐波那契數列,遞歸)

二進制中1的個數(位運算n&(n-1))

數值的整數次方(快速冪)

整數中1出現的次數(從1到n整數中1出現的次數)

醜數(思維,枚舉)

和爲S的連續正數序列(數學+枚舉)
求1+2+3+…+n(&&的短路原理)
不用加減乘除做加法(位運算)

剪繩子(貪心、數學、枚舉)

遞歸、dfs

跳臺階(斐波那契數列,遞歸)

孩子們的遊戲(圓圈中最後剩下的數) (約瑟夫環,遞歸)

正則表達式匹配(遞歸判定)

矩陣中的路徑(dfs)

機器人的運動範圍(dfs)

思維

變態跳臺階(思維/數學推導)
矩形覆蓋(思維,斐波那契數列)

數組中出現次數超過一半的數字(思維,奇妙的思路)

dp

連續子數組的最大和(簡單dp,在線算法)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章