原创 【LeetCode】142. 環形鏈表 II

解題思路 hashmap法 思路簡單,時間複雜度O(n),空間複雜度O(n) Floyd法 知道結論進行編程容易,但是自己推導出Floyd公式比較難,理解該方法,進行編程即可 時間複雜度O(n),空間複雜度O(1) 代碼 hash

原创 【LeetCode】516. 最長迴文子序列

思路 其實就是求s和s的逆序的最長公共子序列的。轉化成最長公共子序列問題就迎刃而解了。 代碼 class Solution { public: int longestPalindromeSubseq(string s) {

原创 【LeetCode】1160. 拼寫單詞

思路 哈希表計數 對於一個單詞word,只要其中的每個字母數量都不大於chars中對應的字母的數量,那麼就可以用chars中的字母拼寫出word。所以我們只需要用一個哈希表存儲chars中每個字母的數量,再用一個哈希表存儲wor

原创 【LeetCode】141. 環形鏈表

代碼 方法1 hash表 class Solution { public: bool hasCycle(ListNode* head) { //特判 if (head == nullptr || head->next =

原创 【LeetCode】647. 迴文子串

思路 思路同最長迴文子串,只不過此題再開闢一個變量記錄迴文子串出現的次數即可 代碼 class Solution { public: int countSubstrings(string s) { vector<vector

原创 【LeetCode】5. 最長迴文子串

思路 1、定義數組元素的含義/定義狀態 dp[i][j]表示S[i]至s[j]所表示的子串是否是迴文子串,是則爲1,不是爲0. 2、找出數組間的關係式 dp[i][j]={ dp[i+1][j-1],S[i]==S

原创 【LeetCode】面試題 08.01. 三步問題

代碼 class Solution { public: const int mod = 1e9 + 7; int waysToStep(int n) { vector<int> dp(n+4); dp[0] = 0;

原创 【劍指offer】面試題57. 和爲s的兩個數字

思路 剛開始自己的想法,對數組進行遍歷,取第一個數時,通過二分法來找target-nums[i],但發現最終這樣的代碼超時,時間複雜度O(nlogn) 改進的想法 使用雙指針法,左指針指向最小元素,右指針指向最大元素, 比較兩個指

原创 【LeetCode】1071. 字符串的最大公因子

思路 枚舉法 從1~min(str1.length(), str2.length())的範圍枚舉每個子串,對每個子串進行check,判斷其是否屬於將等於該字符串 代碼 class Solution { public: strin

原创 【LeetCode】746. 使用最小花費爬樓梯

思路 第一步:定義數組元素的含義 題目的要求的是爬到樓層頂部需要的最低花費。因此可將dp定義爲,到達第n階臺階時的最低花費dp[i] 由於最終要到達的是樓頂,所以此處dp的size爲cost的size+1。 第二步:找出關係數組元

原创 【LeetCode】322. 零錢兌換

思路 dp[n]:當前的目標金額是n,至少需要dp[n]個金幣湊出該金額 初始值,dp[0]=0,目標金額爲0,需要0個金幣 狀態轉移,dp[money] = min(dp[money], dp[money - coin] + 1

原创 【LeetCode】64. 最小路徑和

思路 第一步:定義數組元素的含義 題目的要求的是到達網格的右下角,路徑上的數字和爲最小。因此可將dp定義爲,當走到(i,j)這個位置時,路徑數字和最小爲dp[i][j] 第二步:找出關係數組元素間的關係時 要到達右下角,可以往下走

原创 【LeetCode】395. 至少有K個重複字符的最長子串

思路 分治思想 先遍歷一遍統計字符串S中每個字母出現的次數,然後再遍歷一遍找到出現次數小於k的一個字母對應的位置(partition),包含S[mid]的子串顯然不可能符合題目要求,所以原問題求S[l,r]字符串對應的答案等價於求

原创 【LeetCode】62. 不同路徑

思路 第一步:定義數組元素的含義 題目的要求的是機器人到達網格的右下角,總共有多少條不同的路徑。因此可將dp定義爲,當機器人走到(i,j)這個位置時,一共有dp[i][j]條路徑 第二步:找出關係數組元素間的關係時 機器人要到達右

原创 【LeetCode】72. 編輯距離

思路 第一步:定義數組元素的含義 當字符串word1的長度爲i,字符串word2的長度爲j時,將word1轉化爲word2所使用的最少操作次數爲dp[i][j] 這句定義可以說使理解這道題目的核心,一定要理解dp數組的含義,這樣纔