原创 Leetcode典型題解答和分析、歸納和彙總——T221(最大正方形)

問題描述: 在一個由0和1組成的二維矩陣中,找到只包含1的最大正方形,並返回其面積。 問題分析: 這是一道典型的數學類的題目。需要明確一點是考察動態規劃方面的知識。 【1】我們用o來初始化另一個矩陣dp,而且維數和原數組相同; 【2】d

原创 Leetcode典型題解答和分析、歸納和彙總——T215(數組中的第K個最大元素)

問題描述: 在未排序的數組中找到第K個最大的元素。請注意,你需要找的是數組排序後的第K個最大元素,而不是第K個不同的元素。 、問題分析: 這裏我們給出三種典型的解法: 【1】使用庫函數的方法:sort() class Solution

原创 Leetcode典型題解答和分析、歸納和彙總——T238(除自身外數組的乘積)

問題描述: 給你一個長度爲n的整型數組nums,其中n>1,返回輸出數組output,其中outpu[i]是等於除nums[i]之外的其餘元素的乘積。 注意:時間複雜度爲O(n),並且空間複雜度爲O(1),不能使用除法!!! 問題分析:

原创 Leetcode典型題解答和分析、歸納和彙總——T169(多數元素)

問題描述: 給定一個大小爲n的數組,找到其中大多數的元素。大多數元素是指在數組中出現次數大於n/2的元素。 問題分析: 我們只要將這個數組進行排序,然後輸出中間值即可。 class Solution { public: int

原创 Leetcode典型題解答和分析、歸納和彙總——T153(尋找旋轉排序數組中的最小值)

問題描述: 假設按照升序排序的數組在預先設定的某個點上進行了旋轉,請找出其中最小的數。 問題分析: 這個可以採用C++庫函數直接完成任務,但是爲了直觀顯示這這個查找過程,我們應該要充分利用這個數組的特性,使用二分查找,可以大大提升效率。

原创 Leetcode典型題解答和分析、歸納和彙總——T234(迴文鏈表)

問題描述: 請判斷一個鏈表是否爲迴文鏈表。 要求:採用時間複雜度爲O(n)和空間複雜度爲O(1)。 問題分析: 要時空間複雜度爲常數級別,則必須採用常規的快慢指針方式,而且最多隻能遍歷一次。 我們使用快慢指針的同時還翻轉前半部分,然後與

原创 Leetcode典型題解答和分析、歸納和彙總——T143(重排鏈表)

問題描述: 問題分析: 這是一個非常有意思的排序問題,相當於是“強弱搭配”遊戲,第一個與最後一個,倒數第二個和順數第二個搭配起來。 於是我們可以考慮採用雙指針的方式進行遞歸鏈表重新連接。 /** * Definition for s

原创 Leetcode典型題解答和分析、歸納和彙總——T207(課程表)

問題描述: 你這個學期必修numCourse門課程,記爲0到numCourse-1。在選修某些課程之前需要一些先修課程,例如,在想要修讀課程0,先要完成課程1,我們用一個匹配來表示他們:[0,1]。給定課程總數以及它們的先決條件,請判斷是

原创 Leetcode典型題解答和分析、歸納和彙總——T279(完全平方數)

問題分析: 給定一個正整數n,找到若干個完全平方數(比如1,4,9,16,...)使得它門的和爲n,你需要讓其組成的完全平方數的個數最少。 問題分析: 這是一個典型的動填規劃問題。關鍵在於如何查找動態轉移方程,我們假設前面的已經知道最小

原创 Leetcode典型題解答和分析、歸納和彙總——T144(二叉樹的前序遍歷)

問題描述: 給定一個二叉樹,返回它的前序遍歷。 注意:初級版是採用遞歸算法,進階版是迭代算法。 問題分析: 我們可以採用遞歸算法:構造一個helper()函數。 /** * Definition for a binary tree

原创 Leetcode典型題解答和分析、歸納和彙總——T145(二叉樹的後序遍歷)

問題描述: 給定一個二叉樹,返回它的後序遍歷。 問題分析: 這個與二叉樹的前序遍歷一樣,但是順序要改爲左->右->頭節點的順序。 這裏我們採用迭代算法來求解。主要是採用數據結構中的“棧”的思想。具體的操作如下: 我們先將根節點入棧,然後

原创 Leetcode典型題解答和分析、歸納和彙總——T151(翻轉字符串裏面的單詞)

問題描述: 給定一個字符串,逐個翻轉字符串裏面的單詞。 問題分析: 本題我們主要採用反轉的思路。 【1】定位到單詞左右兩邊的第一個非空字母上(left、right); 【2】採用反轉函數reverse將整個字符串所有字母調轉順序; 【3

原创 Leetcode典型題解答和分析、歸納和彙總——T147(對鏈表進行插入排序)

問題描述: 對鏈表進行插入排序: 【1】插入排序是迭代的,每次只移動一個元素,直到所有元素可以形成一個有序的輸出列表。 【2】每次迭代中,插入排序只從輸入數據中移除一個待排序的元素,找到它在序列中適當的位置,並將其插入。 【3】重複直到

原创 Leetcode典型題解答和分析、歸納和彙總——T236(二叉樹的最近公共祖先)

問題描述: 給定一個二叉樹,找到該樹中兩個指定節點的最近公共祖先。 問題分析: 我們可以將這兩個節點的所處位置進行分類:p、q節點是否處於同一顆子樹中。 【1】從根節點進行遍歷,遞歸向左右查詢節點信息; 【2】遞歸的終止條件:如果當前

原创 Leetcode典型題解答和分析、歸納和彙總——T155(最小棧)

問題描述: 設計一個支持push,top,pop操作,並能在常數時間內檢索到最小元素的棧。 問題分析: 本題其實就是考察棧的基本操作:如入棧s.push(x),出棧s.pop(),查看棧頂元素值s.top()等,然後對於要查看的最小值,