原创 leetcode6_Z字形變換

class Solution { public: string convert(string s, int numRows) { if (numRows == 1) return s; vect

原创 leetcode10_正則表達式匹配

1.  2. 記dp[i][j]表示前i個源字符與前j個模式串字符是否匹配(含當前i,j這兩個字符) class Solution { public: bool isMatch(string s, string p) { in

原创 leetcode1_兩數之和_哈希表

1. 注意可能有重複元素。 //1,普通解法 // class Solution { // public: // vector<int> twoSum(vector<int>& nums, int target) { //

原创 leetcode92_翻轉鏈表||_遞歸

一. 遞歸 1. 參考這個作者寫的太好了,包括解決反轉鏈表的所有思路. 作者:labuladong 鏈接:https://leetcode-cn.com/problems/reverse-linked-list-ii/solution/

原创 leetcode32_最長有效括號_棧

一. 括號問題一般可以藉助棧這種數據結構解決, 先進後出保證這一性質.  二. 因爲求子串的長度, 因此我們可以在棧中保存index(序號)來方便求長度. 三, 看棧的出棧和入棧, 時間複雜度爲O(n). class Solution

原创 滑動窗口問題_總結

一. 一般需要用到雙指針, 還有特殊的需要用到特定數據結構sorted_map.  二. 這類題目脫離不開主串(主數組)和子串(子數組)的關係, 短的在長的中滿足一定的條件.要求時間O(n),空間O(1). 三. 雙指針確定一個窗口. 四

原创 leetcode21_合併兩個有序鏈表_迭代+遞歸

一. 遞歸 1. 兩個鏈表較小的元素與剩下的元素merge併合並. 2. 時間複雜度O(n+m). 空間也爲O(n+m). 有n+m個幀棧. class Solution { public: //函數mergeTwoLists的

原创 leetcode138_複製帶隨機指針的鏈表

一. 回溯 1. 當random訪問了一個新的節點,需要創建它, 否則直接返回舊的指針就好. 2. 特別注意,哈希表中傳入的都是指針,所以一定會是Node*類型,而不是Node. /* // Definition for a Node.

原创 leetcode133_克隆圖_回溯

一. 可以參考leetcode138_複製帶隨機指針的鏈表, https://blog.csdn.net/qieyuan4083/article/details/104332467 二. 回溯就是遍歷, 運用DFS和BFS方法. 1. D

原创 leetcode141_重排鏈表

一.迭代 1. 將鏈表轉換爲數組,然後用雙指針分別取出頭尾指針. 2. 相當於耍賴用數組轉化鏈表. /** * Definition for singly-linked list. * struct ListNode { *

原创 leetcode862_和至少爲K的最短子數組_單調雙端隊列&前綴和

1. 這題感覺真的很難, 首先求和的方法轉換爲前綴和的形式,避免重複計算.想求[i,j]區間則爲sum[i+1]-sum[j]. 2. 運用單調雙端隊列解決應該選擇哪個區間的問題.因爲如果存在負數,則需要把包含負數區間的求和去掉,因爲負

原创 leetcode876_鏈表的中間節點

一. 迭代. 1. 時間O(n), 空間O(1). /** * Definition for singly-linked list. * struct ListNode { * int val; * ListN

原创 leetcode154_尋找旋轉排序數組中的最小值||_二分查找

1. 這一題和leetcode153最大的區別就是可以擁有重複元素. 2. 照例使用二分查找, 重點看下else那裏,最長的註釋部分解釋. 3. 可以參考二分查找模板, https://blog.csdn.net/qieyuan4083

原创 leetcode19_刪除鏈表的倒數第N個節點_鏈表_雙指針_遞歸

1. 最簡單的想法就是先求出鏈表的長度len,再找到(len-k)個節點,即刪除節點的前一個節點,就可以將其刪除. 2. 兩次遍歷. /** * Definition for singly-linked list. * struct

原创 leetcode206_反轉鏈表_迭代+遞歸

一. 迭代 1. 有pre, cur還要保存cur->next. class Solution { public: ListNode* reverseList(ListNode* head) { if(head