原创 Leetcode典型題解答和分析、歸納和彙總——T338(比特位計數)

問題描述: 給定一個非負整數num,對於0<i<nums範圍中的每個數字i,計算其二進制數中1的個數,並將其返回。 問題分析: 本題考察數學知識,主要在於如何處理數學中的二進制問題。 當一個數是奇數的時候,它的1的個數等於前面一個偶數

原创 Leetcode典型題解答和分析、歸納和彙總——T146(LRU緩存機制)

問題描述: 運用你所掌握的數據結構,設計和實現一個  LRU (最近最少使用) 緩存機制。它應該支持以下操作: 獲取數據 get 和 寫入數據 put 。獲取數據 get(key) - 如果密鑰 (key) 存在於緩存中,則獲取密鑰的值(

原创 Leetcode典型題解答和分析、歸納和彙總——T240(搜索二維矩陣II)

問題描述: 編寫一個高效算法來搜索矩陣中的目標值target。該矩陣有以下特性: (1)每行元素從左到右升序排列; (2)每列元素從上到下升序排列。 問題分析: 這是一個非常有特點的矩陣,由於是有序的,因此我們有如下思路: 【1】從左下

原创 Leetcode典型題解答和分析、歸納和彙總——T437(總路徑和III)

問題描述: 給定一個二叉樹,它的每個節點都存放着一個整數值,找出路徑和等於給定數值的路徑總數。 路徑不需要從根節點開始,也不需要從葉子節點結束,但是路徑方向必須是從上到下的。 問題分析: 本題可以採用遞歸算法: 【1】從根節點開始,如果

原创 Leetcode典型題解答和分析、歸納和彙總——T142(環鏈表II)

問題描述: 給定一個鏈表,返回鏈表開始入環的第一個節點。 如果鏈表無環,則返回 null。 爲了表示給定鏈表中的環,我們使用整數 pos 來表示鏈表尾連接到鏈表中的位置(索引從 0 開始)。 如果 pos 是 -1,則在該鏈表中沒有環。

原创 Leetcode典型題解答和分析、歸納和彙總——T283(移動零)

問題描述: 給定一個數組nums,編寫一個函數將所有0移動到數組的末尾,同時保持非零元素的相對順序。 問題分析: 本題單純考察數學類問題,我們只需要用兩個指針變量i,j,然後進行遍歷,對於nums[i]非0的數,進行入數組操作nums[

原创 Leetcode典型題解答和分析、歸納和彙總——T239(滑動窗口的最大值)

問題描述: 給定一個數組nums,有一個大小爲k的滑動窗口從數組的最左側移動到數組的最右側,你只可以看到在滑動窗口內的K個數字。滑動窗口每次向右只能移動一位,返回滑動窗口中的最大值。 問題分析: 如果是隻要找某個區間內的最大值,那這個過

原创 Leetcode典型題解答和分析、歸納和彙總——T543(二叉樹的直徑)

問題描述: 給定一顆二叉樹,你需要計算它的直徑長度。 問題分析: 本題是一個典型的二叉樹遞歸算法考察。我們需要分別計算出最長的左右子樹,然後對最長進行返回。 class Solution{ int Maxlen = 0;

原创 Leetcode典型題解答和分析、歸納和彙總——T337(打家劫舍III)

問題描述: 某個小區只有一個入口,稱之爲根,除了跟之外,每棟樓房有且僅有一個子房與其連接,類似於二叉樹。如果兩個直接相連的房子在同一天晚上被打劫,房屋將會自動報警,請問:如何在不報警的情況下,使得偷盜金額最大化。 問題分析: 本題具有最

原创 Leetcode典型題解答和分析、歸納和彙總——T287(尋找重複數)

問題描述: 給定一個包含n+1個整數的數組nums,其數字在1到n之間,可知至少存在一個重複整數,假設只有一個重複的整數,請找出來。 問題分析: 【1】採用暴力方法:(顯然是不符合時間複雜度要求的!!!)   class Solut

原创 Leetcode典型題解答和分析、歸納和彙總——T208(實現Trie前綴樹)

問題描述: 實現一個Trie前綴樹,包含insert、search和startsWith這三個操作。 問題分析: 這類的題目與堆棧的最小元素查找類似,將所有功能進行集中處理。 首先我們需要明確一下trie樹的基本概念:它又稱爲:字典樹、

原创 Leetcode典型題解答和分析、歸納和彙總——T347(前K個高頻元素)

問題描述: 給定一個非空的整數數組,返回其中出現頻率前K高的元素。 問題分析: 這個是必須有時間複雜度要求的,否則我們可以採用暴力法來求解。應該採用堆排序算法。 這裏我們採用小根堆的方式來進行,因爲求前K個大的元素,一般都是採用小根堆的

原创 Leetcode典型題解答和分析、歸納和彙總——T226(翻轉二叉樹)

問題描述: 翻轉一棵二叉樹: 問題描述: 本題很容易想到的思路就是採用遞歸算法來求解。 class Solution{ public: TreeNode *invertTree(TreeNode* root) {

原创 Leetcode典型題解答和分析、歸納和彙總——T581(最短無序連續子數組)

問題分析: 給定一個整數數組,你需要找到一個來連續的子數組,如果對這個子數組進行排序,那麼整個數組將會變成升序排序。 你要找的子數組應該是最短的,並且可以包括邊界等於號。 問題分析: 我們可以採用雙指針的方式來進行求解。 【1】用max

原创 Leetcode典型題解答和分析、歸納和彙總——T322(零錢兌換)

問題描述: 給定不同面額的硬幣coins和一個總金額amount。編寫一個函數可以計算湊成這個金額的最少硬幣。如果沒有這個組合,返回-1。 問題分析: 直觀解決辦法是從最大面額進行匹配,這樣做會讓硬幣數額最少。但這個無法進行數學歸納,於