原创 leetcode437——Path SumⅢ

題目大意:找出二叉樹中路徑和等於目標和的路徑個數,節點爲整數(可能爲負),路徑起點不一定爲根節點,終點不一定爲葉節點,但是路徑方向始終向下 分析:二叉樹dfs。相比leetcode112、113要注意三點:節點數值可能爲負,路徑起點可以任

原创 leetcode739——Daily Temperatures

題目大意:給出每日氣溫數組,求出每天之後等待幾天,氣溫會升高 分析:棧——求下一個更大元素。用棧記錄遍歷的索引,遍歷時只要當前元素大於棧頂索引所指氣溫值,說明棧頂元素的答案找到了,記錄答案並彈棧,循環直到棧頂索引所指氣溫值不小於當前遍歷氣

原创 leetcode394——Decode String

題目大意:將字符串按規則解碼,k[str]的編碼規則爲k個str相連,例如3[ab2[c]2[a]],解碼後爲abccaaabccaaabccaa 分析:棧。這道題重點在於需要識別嵌套的[],所以需要用棧。遍歷字符串,維護當前的k和str

原创 leetcode283——Move Zeroes

題目大意:原地將數組變化成所有零在數組末尾,其餘元素保持原順序 分析:雙指針。 方法一(自己的):zero指針指向0,non_zero指針指向zero後的第一個非零,交換兩個指針並且雙指針後移。循環這個過程。 方法二:題目相當於要把所有非

原创 leetcode438——Find All Anagrams in a String

題目大意:在字符串s中找出字符串p的所有字母異位詞的首字母下標(字母相同,排列不同的字符串) 分析:滑動窗口雙指針+哈希表。類似leetcode76。遇到子串匹配的問題基本就用滑動窗口解決。 leetcode76:s中找到最短子串,使得包

原创 leetcode448——Find All Numbers Disappeared in an Array

題目大意:大小爲n的數組中,每個數滿足1≤a[i]≤n,有些元素出現了兩次,這意味着1~n中有些數字沒有出現在數組中,找到這些數字。要求時間複雜度O(n),空間複雜度O(1)。 分析:由於要求不使用額外空間,所以需要利用好數組內元素取值範

原创 leetcode221——Maximal Square

題目大意:在一個由0和1組成的二維矩陣內,找到只包含1的最大正方形,並返回其面積。 分析:動態規劃。 dp[i][j]——以matrix[i - 1][j - 1]爲正方形右下角時的最大正方形邊長 初始化:dp[i][j] = 0 狀態轉

原创 leetcode461——Hamming Distance

題目大意:計算兩個整數的漢明距離(兩個數的二進制位中不同的位置個數) 分析:位運算。計算漢明距離:只要統計兩個數的異或中有幾個1即可。比如1(0001)和4(0100),異或後(0101)就能顯示出有幾位不同。異或操作——0^1=1,0^

原创 leetcode239——Sliding Window Maximum

題目大意:求出滑動窗口在數組中從頭到尾的滑動過程中,每次窗口中的最大值,窗口大小k 分析:雙端隊列。 用deque維護窗口滑動過程中最大的k個值的索引。滑動窗口滑動過程相當於右界限i從0~size-1。 每滑動一次需要執行三件事:1、當前

原创 leetcode621——Task Scheduler

題目大意:給出字符數組表示任務列表,26個大寫字母代表26種任務。給出整數n,執行相同任務之間必須有長度爲n的冷凍時間。CPU在每個單位時間可以選擇執行任務或者待命,求完成這些任務所需要的最短時間。 分析:方法一:貪心法。貪心策略:儘早安

原创 leetcode279——Perfect Squares

題目大意:求出加和能夠組成目標值的完全平方數的最小個數 分析:動態規劃。 dp[i]——目標值爲i的完全平方數的最小個數。 初始化:dp[i]=i,因爲最多就是由1組成的,i需要i個1加和組成i。 結果:dp[n] 狀態轉移方程:dp[i

原创 leetcode234——Palindrome Linked List

題目大意:判斷鏈表是否是迴文鏈表,要求時間複雜度O(n),空間複雜度O(1)。 分析:三步走。 第一步:利用快慢指針找到中間結點(奇數個slow指向中間結點,偶數個slow指向前半段的尾結點)。 第二步:反轉slow之後的結點,fast指

原创 leetcode146——LRU Cache

題目大意:設計數據結構實現LRU緩存機制,使得頁面訪問和置換的時間複雜度均爲O(1)。 分析:哈希表+雙向鏈表。哈希表查找O(1),雙向鏈表插入/刪除O(1),滿足題意要求。 雙向鏈表的每個結點爲一個頁面pair<key,value>,隊

原创 leetcode347——Top K Frequent Elements

題目大意:找出數組中出現頻率前k高的元素們 分析:TOPK問題。類似leetcode215,使用堆來維護topk,這道題還需要使用哈希表統計元素頻率。時間複雜度O(nlogk),空間複雜度O(k)。 代碼: class Solution

原创 leetcode169——Majority Element

題目大意:找到數組中出現次數大於n/2的元素——稱爲多數(題裏保證這樣的元素有且只有一個) 分析:方法巨多。 方法一:暴力O(n²)。對每個num計數。 方法二:哈希表O(n)。空間複雜度O(n)。空間換時間,對每個num計數。 方法三: