原创 leetcode—5/15

1.旋轉鏈表 給定一個鏈表,旋轉鏈表,將鏈表每個節點向右移動k個位置,其中k是非負數。 思路:先定義一個quick指針向前移動k步,如果k大於節點數,則從回到開始節點。然後slow指針指向開始節點同quick指針一同移動直到qui

原创 leetcode—6/4

1. 從前序與中序遍歷序列構造二叉樹 根據一棵樹的前序遍歷與中序遍歷構造二叉樹 TreeNode* build(vector<int>& preorder, vector<int>& inorder, int s1, int e1

原创 leetcode—5/20

1.顏色分類 給定一個包含紅色、白色和藍色,一共n個元素的數組,原地對他們進行排序,使得相同顏色的元素相鄰,並按照紅色、白色、藍色順序排列。 使用整數0、1和2分別表示紅色、白色和藍色。 思路: 兩次遍歷 計數排序,先統計每個元

原创 leetcode—5/21

1.子集 給定一組不含重複元素的數組nums,返回該數組所有可能的子集(冪集)。 說明:解集不能包含重複子集。 思路:回溯算法 vector<vector<int>> subsets(vector<int>& nums) {

原创 leetcode—5/29

1.反轉鏈表II 反轉從位置m到n的鏈表。請使用一趟掃描完成反轉。 說明: 1 ≤ m ≤ n ≤ 鏈表長度 思路:一次遍歷的同時採用指針記錄關鍵節點的位置 ListNode* reverseBetween(ListNode* h

原创 leetcode—5/23

1.刪除排序鏈表中的重複元素II 給定一個排序鏈表,刪除所有含有重複數字的節點,只保留原始鏈表中沒有重複出現的數字 思路:快慢指針 ListNode* deleteDuplicates(ListNode* head) {

原创 leetcode—5/22

1.刪除排序數組中的重複項II 給定一個排序數組,你需要在原地刪除重複出現的元素,使得每個元素最多出現兩次,返回移除後數組的新長度。 不要使用額外的數組空間,你必須在原地修改數組並在使用O(1)額外空間的條件下完成。 思路:原地刪

原创 各種圖

用例圖 泛化 發出箭頭的事物“is a”箭頭指向的事物 特殊一方繼承了一般方的特性並增加了新的特性 擴展 增加了新的功能的時候使用 強調現有的用例中沒有包含的功能 包含 用例中更詳細的描述 類圖 關聯關係 雙向關聯、單向關聯

原创 leetcode—6/3

1. 二叉樹的層次遍歷 給定一個二叉樹,返回其按層次遍歷的節點值(逐層地,從左到右訪問所有節點) 思路:利用隊列 vector<vector<int>> levelOrder(TreeNode* root) { v

原创 leetcode—6/2

1.不同的二叉搜索樹 給定一個整數n,求以1…n爲節點組成的二叉搜索樹有多少種 int numTrees(int n) { int res = 0; if(n == 0 || n == 1)

原创 leetcode—6/11

1. 二叉樹展開爲鏈表 給定一個二叉樹,原地將它展開爲鏈表 思路: 非迭代版本 從根節點出發,先檢測其左子節點是否存在,如果存在則將根節點和其右子節點斷開,將左子節點及其後面所有結構一起練到原右子節點的位置,把原右子節點連到原左

原创 leetcode—5/13

1.合併區間 給出一個區間的集合,請合併所有重疊的區間。 思路:首先按照區間起始座標對intervals進行排序,然後合併。 vector<vector<int>> merge(vector<vector<int>>& interva

原创 leetcode—5/14

1.螺旋矩陣II 給定一個正整數n,生成一個包含1到n2的所有元素,且元素按順時針順序螺旋排列的正方形矩陣。 思路:同螺旋矩陣,只需按圈遍歷,併爲遍歷到的每一個元素賦值。 vector<vector<int>> generateMat

原创 leetcode—5/12

1.跳躍遊戲 給定一個非負整數數組,你最初位於數組的第一個位置 數組中的每個元素代表你在該位置可以跳躍的最大長度 判斷你是否能夠到達最後一個位置 思路 從數組的倒數第二個元素看起,每次往前遍歷,如果當前元素能夠到達最後一個位置,那麼就

原创 leetcode—5/10

1.螺旋矩陣 給定一個包含m×n個元素的矩陣(m行,n列),請按照順時針螺旋順序,返回矩陣中所有元素。 思路:矩陣中有多少個圈,每一圈按順時針方向輸出 做的我想哭了,注意最後逆向判斷的時候該層是否只有一行或這一列,以及min那裏加!括