生活随笔
收集整理的這篇文章主要介紹了
1月刷题记录
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
二叉樹
NC224 從下到上打印二叉樹(層序遍歷,每一層的結果從后往前放回ans,麻煩的是arraylist轉二維數組)NC195 二叉樹的直徑(后序遍歷,遞歸返回左右子樹中較大的那個再+1,遞歸過程中不斷計算maxpath=Math.max(maxpath,left+right))NC191 二叉搜索樹的最近公共祖先(后序遍歷,遞歸,費解)NC123 序列化二叉樹(前序遍歷,主要是對字符串的操作)NC84 完全二叉樹結點數(可以直接后序遍歷計算,如果要用完全二叉樹的特性就要遞歸計算左右子樹的高度,滿二叉樹計算公式:2 ^ heigh-1,總的結點數 = 根節點 + 滿二叉樹節點個數+ 完全二叉樹節點個數)NC98 判斷t1樹中是否有與t2樹完全相同的子樹(先找到相等的root,再遞歸計算這兩棵子樹是否每個結點都相等)NC223 從中序與后序遍歷序列構造二叉樹(畫圖找下標)NC193 二叉樹的前序遍歷NC192 二叉樹的后序遍歷NC150 二叉樹的個數 (動態規劃。對于每一個根i他都是由左邊子樹(1, 2, …, i - 1)和右邊子樹(i + 1, i + 2, …, n)組成的。因此他的個數肯定是兩個子樹情況的積。最后n個根,加起來)NC162 二叉樹中和為某一值的路徑(三) (先序遍歷,全局變量res)NC248 左葉子之和(dfs,多傳一個isLeft用于記錄走了左邊)NC169 修剪葉子(dfs,發現左/右兒子且它是葉節點就修建,即返回空)
動態規劃
NC17 最長回文子串(dp[i][i]定義為A[I]到A[j]是否為回文子串,是1,否0,對于對角線上方的部分,從下到上,從左到右遍歷)
字符串
NC141 判斷是否為回文字符串(頭尾配對逐個判斷)NC56 回文數字(int轉字符串Integer.toString(x))
鏈表
NC96 判斷一個表是否為回文結構(先找到鏈表的中點,再把鏈表的后半部分進行反轉)NC78 反轉鏈表(遞歸和迭代,熟練掌握)NC21 鏈表內指定區間反轉(在head前面加一個dummynode,截斷left和right進行反轉鏈表再接回去)NC50 鏈表中的節點每k個一組翻轉(遞歸做法,a是頭結點,b是從head開始走k步指向的結點,用一個reverse函數反轉a到b,a后面接上 下一次遞歸的結果,b作為頭結點,最后返回newHead)NC33 合并兩個排序的鏈表(把merge定義為,輸入兩個listnode,返回較小的那個結點,base case是當有一個listnode為空,只能返回另一個listnode。遞歸比較list1和list2指向的值,哪個小就繼續merger下一個結點)NC4 判斷鏈表中是否有環(經典快慢指針)NC66 兩個鏈表的第一個公共結點(交替走,會相遇)leetcode 142. 環形鏈表 II(先用快慢指針找到第一次的相遇點,然后其中一個指針回到head,另一個指針不動兩個指針同速往前走,它們會再次相遇在環形鏈表的入口點)NC51 合并k個已排序的鏈表(利用了小根堆的性質,先把每條鏈表的第一個結點放進小根堆,再逐個彈出,每次彈出結點都把它的下一位放進小根堆中)NC2 重排鏈表 (找到中點,切成兩條鏈表(快慢指針),反轉第二條鏈表,合并兩條鏈表)NC53 刪除鏈表的倒數第n個節點(快慢指針,加dummy結點)NC40 兩個鏈表生成相加鏈表(先反轉鏈表,再相加,注意最高位可能還有一個進位,得到結果后反轉回來)NC70 單鏈表的排序(歸并排序,找到鏈表中點并斷開成兩條鏈表,對左右兩條鏈表繼續遞歸,返回合并兩條有序鏈表的結果)NC25 刪除有序鏈表中重復的元素-I(雙指針)NC186 兩兩交換鏈表的節點(類似NC50)NC207 排序奇升偶降鏈表(分為奇鏈表和偶鏈表,反轉偶鏈表,兩條鏈表歸并)JZ6 從尾到頭打印鏈表(可以先反轉鏈表)NC211 旋轉鏈表()NC24 刪除有序鏈表中重復的元素-II(pre、cur、tmp)NC69 鏈表中倒數最后k個結點(快慢指針)NC133 鏈表的奇偶重排(NC207差不多思路)NC23 劃分鏈表(新建兩個鏈表接收大于x和小于x的結點,最后連起來)NC244 對鏈表進行插入排序(遍歷鏈表,找錯的結點tmp并放回正確位置)
DFS
NC138 矩陣最長遞增路徑()NC226 被圍繞的區域(最外層的’O’先標記為’A’,能和最外層直接相連的’O’也標記為’A’,之后遍歷整個矩陣,把’O’變為’X’, 把’A’變為’O’)
排序
NC140 排序(用了插入排序,遍歷數組,每個數都和前面的數比較,把小的數交換到前面 一直移到合適的位置上去)
數組
NC73 數組中出現次數超過一半的數字(先排序,取中間數)NC61 兩數之和(哈希表)NC166 連續子數組的最大和(二)(在原有dp基礎上記錄max,還要記錄當前len,不斷更新maxlen和maxend,最后進行輸出)leetcode 15. 三數之和 (先排序,兩步去重)NC22 合并兩個有序的數組(歸并排序,為了能不額外創建數組,A數組后面有多余空間,所以從后往前進行歸并)NC37 合并區間([a,b][c,d]可以合并的情況有兩種,a<c<b<d,a<c<d<b)NC107 尋找峰值(例外情況有:只輸入一個數 直接返回0,峰值在最左側和最右側)NC77 調整數組順序使奇數位于偶數前面(一)(兩個數組去存再合并)
碎碎念
1月要過完啦~~本命年終于要過去咯,希望新年順順利利
總結
以上是生活随笔為你收集整理的1月刷题记录的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。