Skip to content

16fly/Leetcode

ย 
ย 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Catalogue

๐Ÿ” good algorithm
โœ๏ธ smart code design
๐ŸŽ…: good question
โŒ: not good designed question

ๅ‡ ไธชๅ•็‹ฌ็ฎ—ๆณ•:

  1. Trie
  2. Union Find

Breadth-First Search

Title Time Space Difficulty Algorithm Note
102. Binary Tree Level Order Traversal O(n) O(n) Medium
ย ย ย ย ย ย ย  ย ย ย  ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย 

Array

Title Time Space Difficulty Algorithm Note
015. 3 Sum O(n^2) O(1) Medium ๐Ÿ”้—ฎ้ข˜ๅ…ณ้”ฎๆ˜ฏsort + skip duplicate
016. 3 Sum Closest O(n^2) O(1) Medium ๐Ÿ”sort + two pointer๏ผŒๆ นๆฎthree sum ๅ’Œsorted list็งปๅŠจไธคไธชpointers
018. 4 Sum O(n^3) O(1) Medium ๐Ÿ”sort + two pointer๏ผŒๆ€่ทฏๅ’Œ015. 3 Sum ไธ€ๆ ท
026. Remove Duplicates from Sorted Array O(n) O(1) Easy Two pointer
027. Remove Element O(n) O(1) Easy Two pointer
031. Next Permutation O(n) O(1) Medium ่ทŸ556. Next Greater Element III ๆ€่ทฏ็ฑปไผผ, C++ๅฏไปฅ็”จis_sorted_until + upper_bound()
041. First Missing Positive O(n) O(1) Hard ๐Ÿ”ๅ…ˆ็ฝฎๆข, ๆŠŠๆฏไธชๅ…ƒ็ด ๆ”พๅœจๅˆ้€‚ไฝ็ฝฎ๏ผŒๅ†็œ‹A[i] == i+1 ? ไธ็ญ‰ไบŽ return i+1, ๆœ€ๅŽๅฆ‚ๆžœ่ฟ˜ๆฒกreturn, return size +1
048. Rotate Image O(n^2) O(1) Medium ๐Ÿ”
  • ไธŠไธ‹ๅทฆๅณๅ››ไธชๅŒบๅŸŸ๏ผŒๆฏไธชๅŒบๅŸŸ็›ธไบ’็ฝฎๆข
  • ๅ…ˆไปฅๅทฆไธ‹ๅˆฐๅณไธŠๅฏน่ง’็บฟ็ฝฎๆข๏ผŒ็„ถๅŽไธŠไธ‹ๆข
054. Spiral Matrix O(m*n) O(1) Medium ๐Ÿ”ๅฎšไน‰ up, down, left, right ๅ››ไธช่พน็•Œ๏ผŒๆฏๆฌกloop ๅœจๆœ€ๅค–ๅ›ด็š„ไธ€ๅœˆ
059. Spiral Matrix II O(n^2) O(1) Medium ๐Ÿ”ๆ€่ทฏ่ทŸ048. Rotate Image ๅ’Œ 054. Spiral Matrix ็ฑปไผผ
066. Plus One O(n) O(1) Easy
073. Set Matrix Zeroes O(m*n) O(1) Medium ๐Ÿ”two pass:1. ๆŠŠๅฆ‚ๆžœmatrix[i][j] == 0, ๆŠŠmatrix[i][0] ๅ’Œmatrix[0][j] ่ฎพไธบ0, ๅฆ‚ๆžœ็ฌฌไธ€ๅˆ—่ฎพ0ไน‹ๅ‰๏ผŒๆœ‰ๆ•ฐไธบ0๏ผŒ่ฎพcol0 = 0ใ€‚ 2.ไปŽไธ‹ๅพ€ไธŠloop, ็ขฐๅˆฐmatrix[i][0]] or matrix[0][j] ไธบ0, matrix[i][j] = 0, if col0 == 0, matrix[i][0] = 0
080. Remove Duplicates from Sorted Array II O(n) O(1) Medium
118. Pascal's Triangle O(n^2) O(1) Easy
119. Pascal's Triangle II O(n^2) O(1) Easy Easy DP
121. Best Time to Buy and Sell Stock O(n) O(1) Easy
128. Longest Consecutive Sequence O(n) O(n) Hard ๐Ÿ”
  • ๅ…ˆๆŠŠๆ‰€ๆœ‰ๆ•ฐๆ”พ่ฟ›hash set ็„ถๅŽๆฏๆฌกpopไธ€ไธชๆ•ฐn๏ผŒ่ฎพlower = n-1, upper = n+1, ๆŒ็ปญpop lower--, upper++,็›ดๅˆฐlower,upperไธๅœจset้‡Œ, ็ป“ๆžœๆ˜ฏmax(res, upper-lower-1)
  • Onepass: ็”จhashmap่ฎฐๅฝ•ไปฅ็Žฐๅœจ็‚นไฝœไธบ่พน็•Œ็‚นๆœ€ๅคง่ฟž็ปญ้•ฟ๏ผŒไธ€่พนloopไธ€่พนupdateไธๅŒๅทฆๅณ่พน็•Œๅ€ผ
169. Majority Element O(n) O(1) Easy
189. Rotate Array O(n) O(1) Easy
209. Minimum Size Subarray Sum O(n) O(1) Medium ๐Ÿ”
  • sliding window: ๅˆฐsum >= s, ็งปๅŠจๅทฆ้ข, ไธๆ–ญๅ‡ๅฐwindowไธ”sum>=s, ๅฏปๆ‰พๆœ€ๅฐ r-l+1
  • binary search: l = 1, r= size, while l<=r,ๆฃ€ๆŸฅmidไฝœไธบ็ช—ๅฃsizeๆ˜ฏๅฆๆปก่ถณ>=s
  • binary search: ๅปบไธ€ไธชๆ–ฐ็š„vector, newsum[i] ่กจ็คบnums[0:i]็š„sum, ไปŽๆ–ฐ็š„newsum็š„ๆฏไธช็‚นไฝœไธบ่ตท็‚นๆ‰พๆœ€ๅฐๆปก่ถณs็š„็ช—ๅฃ
215. Kth Largest Element in an Array O(n) ~ O(n^2) O(1) Medium ๐Ÿ”
  • quick selection(nth_element)
  • heap: priority queue / multiset
228. Summary Ranges O(n) O(1) Medium
229. Majority Element II O(n) O(1) Medium ๐Ÿ”Boyer-Moore Majority Vote algorithm
238. Product of Array Except Self O(n) O(1) Medium ๐Ÿ”res[i]่กจ็คบ nums[0: i-1]็š„ไน˜็งฏ๏ผŒright ่ฎฐๅฝ•ไปŽ็ป“ๅฐพๅˆฐnums[i+1: end]็š„ไน˜็งฏ. ๆœ€ๅŽres[i] = res[i] * right; ไนŸๅฏไปฅ็”จleft, right One Pass
240. Search a 2D Matrix II O(n+m) O(1) Medium ๐Ÿ”sorted matrix้ข˜็›ฎ็š„ๅ…ณ้”ฎๆ˜ฏไปŽ็ฌฌไธ€่กŒๆœ€ๅŽไธ€ไธชๅผ€ๅง‹๏ผŒๅฆ‚ๆžœๅฝ“ๅ‰ๆ•ฐๆฏ”ๆƒณ่ฆ็š„ๅคง, --col, ๅฆ‚ๆžœๅฝ“ๅ‰ๆ•ฐๆฏ”ๆƒณ่ฆ็š„ๅฐ๏ผŒ++row
289. Game of Life O(m * n) O(1) Medium ๐Ÿ”่ทŸ238. Product of Array Except Selfๆœ‰ไธ€็‚น็‚น็ฑปไผผ๏ผŒๅ…ˆๅ˜ๅŒ–matrixๅˆฐๆƒณ่ฆ็š„ๆ ผๅผ, ็„ถๅŽๅ†ๅštransformๅˆฐ็ป“ๆžœ: ๆŠŠไธ‹ไธ€ไปฃๆดป็š„
334. Increasing Triplet Subsequence O(n) O(1) Medium ๐Ÿ”็”จไธคไธชๆ•ฐ่กจ็คบb, c, c่กจ็คบๅฝ“ๅ‰ๆœ€ๅฐ, b่กจ็คบๅฝ“ๅ‰็ฌฌไบŒๅฐ, ๅฝ“i้ƒฝๅคงไบŽ่ฟ™ไธคไธชๆ•ฐ๏ผŒreturn true, ไธ็”จๆ‹…ๅฟƒiๅชๆ›ดๆ–ฐๆ›ดๆ–ฐc, ๅ› ไธบ็ญ”ๆกˆๅฟ…้กป่ฆ่ฟˆ่ฟ‡b
384. Shuffle an Array O(n) O(n) Medium C++ srand(time(NULL)); rand(); uniform_int_distribution
396. Rotate Function O(n) O(1) Medium ๐Ÿ”mathematical induction F(k) = F(k-1) + sum - nBk[-k]
412. Fizz Buzz O(n) O(1) Easy
414. Third Maximum Number O(n) O(1) Easy
419. Battleships in a Board O(n*m) O(1) Medium ๐Ÿ”็œ‹ๆบๅคด๏ผŒif [i][j] = 'X' ไธ” [i-1][j] ๅ’Œ [i][j-1] ๅฆ‚ๆžœ้ƒฝไธๆ˜ฏX๏ผŒcount += 1
442. Find All Duplicates in an Array O(n) O(1) Medium
  • ๆŠŠnums[i]-1ไฝœไธบIndex, ๆŠŠnums[index] ๅ˜ๆˆ่ดŸๆ•ฐ๏ผŒๅฆ‚ๆžœๅณๅฐ†ๅ˜ๅพ—ๅทฒ็ปๆ˜ฏ่ดŸๆ•ฐ๏ผŒไปฃ่กจ้‡ๅค
  • ๆŠŠnums[i]-1ไฝœไธบIndex,ๆŠŠnums[i] ้€š่ฟ‡swapๅˆฐnums[index]ไธŠ, ็ฌฌไบŒๆฌกpass, ๅฆ‚ๆžœnums[i]!=i+1, ่กจ็คบ้‡ๅค็š„
448. Find All Numbers Disappeared in an Array O(n) O(1) Medium ๆ€่ทฏไธŽ442. Find All Duplicates in an Arrayไธ€ๆจกไธ€ๆ ท๏ผŒไธค็งๆ–นๆณ•ไนŸไธ€ๆ ท
565. Array Nesting O(n) O(1) Medium DFS, ๆŠŠvisit็š„็‚นๅ˜ไธบ-1, nest arrayๆ˜ฏๅพช็Žฏ๏ผŒๆ‰€ไปฅ่ตท็‚นๆ— ่ฎบๆ˜ฏๅ“ชไธช็‚น่ฟ›ๅ…ฅ้ƒฝๅฏไปฅๅพ—ๅˆฐๅฎŒๆ•ด็š„ๅพช็Žฏ, ๆฏ”ๅฆ‚ a->b->c->d->a ไธไผšๆœ‰ a->b->c->d->b
566. Reshape the Matrix O(m*n) O(1) Easy
581. Shortest Unsorted Continuous Subarray O(n) O(1) Easy ๐Ÿ”
  • ไปŽๅทฆ่ตท, ๆœ€ๅŽไธ€ไธชๅฐไบŽๅทฆไพงๆœ€ๅคง็š„ๆ•ฐไธบ right,ไปŽๅณ่ตท๏ผŒๆœ€ๅŽไธ€ไธชๅคงไบŽๅณไพงๆœ€ๅฐ็š„ๆ•ฐไธบleft, res = right - left + 1
  • two pointer, ๅฝ“ๆœ‰ๆ•ฐๅฐไบŽcurrent max, ๅพ€ๅ›žๅผ€ๅง‹ๆ‰พ่ตท็‚นstart, startๅช่ƒฝๅ‡ๅฐ, endๅช่ƒฝๅขžๅŠ , res = end - start + 1
605. Can Place Flowers O(n) O(1) Easy
643. Maximum Average Subarray I O(n) O(1) Easy ๆœ€็ฎ€ๅ•็š„sliding window
661. Image Smoother O(n) O(1) Easy ่ทŸ289. Game of Lifeๆ€่ทฏไธ€ๆ ท๏ผŒ ไธ€็‚นไธไธ€ๆ ท็š„ๆ˜ฏๆŠŠไธ‹ไธ€ไปฃ็š„ๆ•ฐๅณ็งป8ไธชbit, ไน‹ๅŽๅ†็ฌฌไบŒๆฌกpass matrix, ๆฏไธช็‚น>>8 ๅทฆ็งป8ไธชbits
665. Non-decreasing Array O(n) O(1) Easy ๐Ÿ”ไธค็งoperation: 1.nums[i-1] = nums[i] (้™), nums[i] = nums[i-1] (ๅ‡), ้™ไผ˜ไบŽๅ‡
667. Beautiful Arrangement II O(n) O(1) Meidum ๐Ÿ”brainstorm
670. Maximum Swap O(n) O(1) Medium ๐Ÿ”
  • Two Pass: ็ฌฌไธ€ไธชpass ่ฎฐๅฝ•ๆฏไธชdigitๆœ€ๅŽๅ‡บ็Žฐไฝ็ฝฎ, ็ฌฌไบŒไธชpass: ๅฆ‚ๆžœๆœ‰ๅคงไบŽๅฝ“ๅ‰digitๅ‡บ็Žฐ, swap & return
  • One Pass: ไปŽๅŽๅพ€ๅ‰, ่ฎฐๅฝ•ๆœ€ๅคงๆ•ฐ็š„index,ๅฆ‚ๆžœๅฝ“ๅ‰ๆ•ฐๅฐไบŽๆœ€ๅคงๆ•ฐ,ๆ›ดๆ–ฐ่ฟ›่กŒswap็š„ไธคไธชindex๏ผŒๆœ€ๅŽ
674. Longest Continuous Increasing Subsequence O(n) O(1) Easy
697. Degree of an Array O(n) O(n) Easy
713. Subarray Product Less Than K O(n) O(1) Medium ๐Ÿ”๐Ÿ˜ Sliding Window
845. Longest Mountain in Array O(n) O(1) Medium ๐Ÿธ
918. Maximum Sum Circular Subarray O(n) O(1) Medium ๐ŸŽ…๐ŸŽ… Kadane's algorithm
997. Find the Town Judge O(n+t) O(n) Easy ๐ŸŽ… In-degree, out-degree
1375. Bulb Switcher III O(n) O(1) Medium
1380. Lucky Numbers in a Matrix O(m*n) O(m+n) Easy zip(*m)่Žทๅพ—column in list, set intersection
1389. Create Target Array in the Given Order O(n^2) O(1) Easy ย โŒ
1394. Find Lucky Integer in an Array O(n) O(n) Easy ย :pencil2: Loop C++ Map Key Value
ย ย ย ย ย ย ย  ย ย ย  ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย 

Greedy

Title Time Space Difficulty Algorithm Note
011. Container With Most Water O(n) O(1) Medium
042. Trapping Rain Water O(n) O(1) Hard Greedy/Descending Stack
045. Jump Game II O(n) O(1) Hard ๐ŸŽ…
055. Jump Game O(n) O(1) Medium
122. Best Time to Buy and Sell Stock II O(n) O(1) Medium
134. Gas Station O(n) O(1) Medium ๐ŸŽ…
135. Candy O(n) O(n) O(1) Hard ๐ŸŽ…
316. Remove Duplicate Letters O(n) O(k) Hard ๐ŸŽ…๐ŸŽ…๐ŸŽ… Tricky
321. Create Maximum Number O((m+n)^3) O(k) Hard ๐ŸŽ…๐ŸŽ…Try all and compare(Not a good question)
330. Patching Array O(s + logn) O(1) Hard ๐ŸŽ…๐ŸŽ…๐ŸŽ…Hint
376.Wiggle Subsequence O(n) O(1) Medium ๐ŸŽ…
392. Is Subsequence O(n) O(1) Easy โŒ:pencil2: two pointer or C++ iterator; follow-upๅฏไปฅ็”จbinary search; iter
397. Integer Replacement O(log(n)) O(1) Medium Math
402. Remove K Digits O(n) O(n) Medium ๐ŸŽ… ascending stack(string ๅฏไปฅๅšstack)
435. Non-overlapping Intervals O(nlogn) O(1) Medium Sort ็ฑปไผผ็š„้ข˜
452. Minimum Number of Arrows to Burst Balloons O(nlogn) O(1) Medium Sort ็ฑปไผผ็š„้ข˜ Python ๅฏไปฅ็”จ iter
455. Assign Cookies O(nlogn) O(1) Easy โŒ
621. Task Scheduler O(n) O(1) Medium ๐ŸŽ…
630. Course Schedule III O(nlogn) O(k) Hard ๐ŸŽ… ็ฑปไผผ็š„้ข˜
646. Maximum Length of Pair Chain O(nlogn) O(1) Medium ็ฑปไผผ็š„้ข˜
649. Dota2 Senate O(n) O(n) Medium Queue
659. Split Array into Consecutive Subsequences O(n) O(n) Medium ๐ŸŽ…
738. Monotone Increasing Digits O(1) O(1) Medium
757. Set Intersection Size At Least Two O(nlogn) O(1) Hard ๐ŸŽ…๐ŸŽ… ่พน็•Œ้€‰ๆœ€ๅคง็š„ไธคไธช๏ผŒ่€Œไธๆ˜ฏไธ€ๅคงไธ€ๅฐ
763. Partition Labels O(n) O(n) Medium hashmap/sliding windows
767. Reorganize String O(n) O(1) Medium priority_queue
798. Smallest Rotation with Highest Score O(n) O(1) Hard ๐ŸŽ…๐ŸŽ…๐ŸŽ…
843. Guess the Word O(n^2) O(n) Hard
861. Score After Flipping Matrix O(m * n) O(1) Medium
870. Advantage Shuffle O(nlogn) O(n) Medium ๐Ÿ’œ๐ŸŽ… sort \ maxheap \ minheap
881. Boats to Save People O(nlogn) O(n) Medium two pointer
936. Stamping The Sequence O((n - m) * m)) O((n - m) * m)) Hard ๐ŸŽ…๐ŸŽ…๐ŸŽ…, ่ฟ˜ๅฏไปฅ็”จDFS
948. Bag of Tokens O(nlogn) O(1) Medium Bad Problem Description. Rewrite Version
962. Maximum Width Ramp O(n) O(n) Medium ๐Ÿ’œ๐ŸŽ…๐ŸŽ…
968. Binary Tree Cameras O(n) O(h) Hard ๐ŸŽ…
984. String Without AAA or BBB O(a+b) O(1) Medium
995. Minimum Number of K Consecutive Bit Flips O(n) O(1) Hard ๐Ÿ’œ๐ŸŽ…
1249. Minimum Remove to Make Valid Parentheses O(n) O(1) Medium Stack
1386. Cinema Seat Allocation O(n) O(n) Medium โŒ
1419 Minimum Number of Frogs Croaking O(n) O(1) Medium ้œ€ไฟ่ฏ counter ้€’ๅขž c>r>o>a>k
ย ย ย ย ย ย ย  ย ย ย  ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย 

Tree

//Inorder Traversal
//stack, 
class Solution {
public:
    vector<int> inorderTraversal(TreeNode* root) {
        vector<int>res;
        stack<TreeNode*>stk;
        while(root || !stk.empty()){
            if(root){
               // res.push_back(cur->val);  //Preorder
                stk.push(root);
                root = root->left;
            }else{
                root = stk.top(); stk.pop();
               // res.push_back(root->val); //Inorder
                root = root->right;
            }
        }
        return res;
    }
};

//Postorder
class Solution {
public:
    vector<int> postorderTraversal(TreeNode* root) {
        stack<TreeNode*> stk;
        vector<int>res;
        TreeNode* cur = root;
        while(cur ||!stk.empty()){
            if(cur){
                res.push_back(cur->val);
                stk.push(cur);
                cur = cur->right;
            }else{
                cur = stk.top(); stk.pop();
                cur = cur->left;
            }
        }
        
        reverse(res.begin(), res.end());
        return res;
    }
};

//Morris: ๆต็จ‹ๅ›พ่ง,  094. Binary Tree Inorder Traversal.cpp
class Solution {
public:
    vector<int> inorderTraversal(TreeNode* root) {
        vector<int>res;
        TreeNode* cur = root;
        while(cur){
            if(!cur->left)
            {
                //res.push_back(cur->val); //Inorder, preorder
                cur = cur->right;
            }else{
                TreeNode* pre = cur->left;
                while(pre->right && pre->right!=cur)
                    pre = pre->right;
                if(pre->right){
                    //res.push_back(cur->val); //Inorder
                    pre->right = NULL; 
                    cur = cur->right;
                }
                else{
                    //res.push_back(cur->val); //Pre-order
                    pre->right = cur;
                    cur = cur->left;
                }
            }
        }
        return res;
    }
};


//PostOrder
class Solution {
public:
    vector<int> postorderTraversal(TreeNode* root) {
        vector<int>res;
        TreeNode* cur = root;
        while(cur){
            if(!cur->right){
                res.push_back(cur->val);
                cur = cur->left;
            }else{
                TreeNode* pre = cur->right;
                while(pre->left && pre->left != cur)
                    pre = pre->left;
                if(pre->left){
                    pre->left = NULL;
                    cur = cur->left;
                }else{
                    res.push_back(cur->val);
                    pre->left = cur;
                    cur = cur->right;
                }
            }
        }
        reverse(res.begin(), res.end());
        return res;
    }
};


//ๅฆ‚ๆžœๆœ‰right child, ็ป่ฟ‡root ไธคๆฌก 
//112. Path Sum  https://leetcode.com/problems/path-sum/
class Solution {
public:
    bool hasPathSum(TreeNode* root, int sum) {
        stack<TreeNode*>stk;
        TreeNode* cur = root, *pre = nullptr;
        while(cur || !stk.empty()){
            if(cur){
                stk.push(cur);
                sum -= cur->val;
                cur = cur->left;       
            }else{
                cur = stk.top();
                if(!cur->right && !cur->left && sum == 0)
                     return true;
                
                if(cur->right && cur->right != pre){
                    cur = cur->right;
                }
                else{
                    pre = cur;
                    sum += cur->val;
                    cur = nullptr;
                    stk.pop();
                }
            }
        }
        return false;
    }
};


//In order traversal, ไธๅŒไบŽไน‹ๅ‰็š„iterative ่งฃ, ่ฟ™ๆ˜ฏๆฏไธชnode ้ƒฝๅ…ˆ่ขซpush ่ฟ›stack, ๅชๆœ‰return backๆ—ถๅ€™ๆ‰pop
/*
่ฏฆ่ง  236. Lowest Common Ancestor of a Binary Tree
https://github.com/beckswu/Leetcode/blob/master/DFS/236.%20Lowest%20Common%20Ancestor%20of%20a%20Binary%20Tree.cpp#L32๏ผŒ
     1
    /
    2 
     \
      3  

ๆœ€ไธŠ้ข็š„inorder ็š„ stack ๅˆฐ3ๆ—ถๅ€™ๆ˜ฏ  [1๏ผŒ3 
        ไธ‹้ข่งฃ็š„stack ๆ˜ฏ ๅˆฐ3ๆ˜ฏ   [1,2,3]

*/

class Solution {
public:
    TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
        //iterative, path comparing
        if(!root ) return root;
        vector<TreeNode*> path;
        if(root)
            path.push_back(root); //tempๆ˜ฏstack๏ผŒๅ…ƒ็ด ๆ˜ฏไปŽrootๅˆฐ็ŽฐๅœจnodeไธŠ็š„่ทฏๅพ„
        TreeNode *prev = nullptr;
        while(!path.empty()){
            root=temp.back();
            if(!root->left && !root->right || !root->right && prev==root->left || root->right && prev==root->right){
                path.pop_back();
                prev=root;
            }
            else{
                if(!root->left || prev==root->left) path.push_back(root->right);
                else path.push_back(root->left);
            }
        }
    }
};


TreeNode* helper(TreeNode** head ){
        int val = *head; //่Žทๅ–ๅ€ผ, ๆฏ”ๅฆ‚ๅ€ผๆ˜ฏ5,
        TreeNode** cur = head; //
        head = &((*head)->left); //ไธไผšๅฝฑๅ“ไน‹ๅ‰cur็š„ๅ€ผ๏ผŒ ๆŠŠhead assign ไธ€ไธชๆ–ฐobject, ไน‹ๅ‰็ป‘ๅฎšhead็š„ๅœฐๅ€(cur)็š„object ๅนถๆฒกๆœ‰ๅˆ ้™ค 
        *head = (*head)->left; //ไผšๅฝฑๅ“cur็š„ๅ€ผ๏ผŒ *head ๅ–ๅœฐๅ€, ๆ”นๅ˜head่ฟ™ไธชๅœฐๅ€็ป‘ๅฎš็š„ๅ€ผ, ๅ› ไธบcur ๅ’Œheadๅœฐๅ€ไธ€ๆ ท , ๆ‰€ไปฅcur็š„ๅ€ผไนŸๆ”นๅ˜
        return cur;
    }

//ๆฏ”ๅฆ‚: 
 void helper(int *p){
     int *newp = p;
     *p = 5; //ไผšๅฝฑๅ“newp็š„ๅ€ผ, ๅ› ไธบnewp ๅ’Œ pๅœฐๅ€ไธ€ๆ ท๏ผŒๆ›ดๆ”น็š„p็š„ๅ€ผ๏ผŒ newp่‡ชๅŠจไผšๆ›ดๆ”น
     p = new int(10); // ไธไผšๆ›ดๆ”นnewp ็š„ๅ€ผ, ๅ› ไธบp็š„ๅœฐๅ€่ขซๆขๆމไบ†, ไน‹ๅ‰็ป‘ๅฎšp็š„ๅœฐๅ€ๅนถๆฒกๆœ‰ๅˆ ้™ค
 }
Title Time Space Difficulty Algorithm Note
094. Binary Tree Inorder Traversal O(n) O(1) Medium ๐Ÿ˜๐Ÿ”Morris Traversal, ็Žฐๅœจ็‚น่ฟžๅœจ left-child ๆœ€ๅณไพง็š„node ๅณไพง, ๅ› ไธบๆœ€ๅณไพง็š„node ๆœ€ๅŽvisit
099 Recover Binary Search Tree O(n) O(1) Hard ๐Ÿ”๐Ÿ˜š ่ฐƒๆขnode ไน‹้—ด็ฌฌไธ€ไธชๆœ€้”™่ฏฏ็š„๏ผˆไนŸๆ˜ฏๆœ€ๅคง็š„prev๏ผ‰๏ผŒๅ’Œๆœ€ๅŽไธ€ไธช้”™่ฏฏ๏ผˆไนŸๆ˜ฏๆœ€ๅฐ็š„cur๏ผ‰๏ผŒ๐Ÿ’ก้กบๅบไธ€ๅฎšๆ˜ฏinorder๏ผŒ็”ฑๅฐๅˆฐๅคง
144. Binary Tree Preorder Traversal O(n) O(1) Medium Morris Traversal,ๆณจๆ„preorder ไธŽinorder push ่ฟ›vector็š„้กบๅบ็š„ๅŒบๅˆซ
145. Binary Tree Postorder Traversal O(n) O(1) Hard = ๅ…ˆright ๅ†left ็š„ inorder traversal ๐Ÿ”Morris Traversal
208. Implement Trie (Prefix Tree) O(n) O(1) Medium Trie
211. Add and Search Word - Data structure design O(min(n, h)) O(min(n, h)) Medium Trie + DFS
226. Invert Binary Tree O(n) O(h), O(w)) Easy ๐Ÿ‘ฝ ไธๅฏไปฅ left = invert(right); right = invert(left);, ๅ› ไธบleft ๅœจinvert rightๆ—ถๅ€™ๆ”นๅ˜
297. Serialize and Deserialize Binary Tree O(n) O(h) Hard โœ๏ธostringstream & istringstream ็”จๆณ•, BFS๏ผ> pointer of pointer ๅญ˜pointer ๅœฐๅ€
307. Range Sum Query - Mutable O(n), O(logn) O(n) Medium โœ๏ธ BIT & Segment Tree; BIT tree ้œ€่ฆarrไฝœไธบๅ‚็…ง็‰ฉ,ๆฏๆฌกๆ นๆฎval-arr[i]็š„update, update่ฟ‡ๅŽarr[i] = val
525. Contiguous Array O(n) O(n) Medium ๐Ÿ˜ๆŠŠๆ‰€ๆœ‰็š„0ๅ˜ๆˆ-1๏ผŒ ๆ‰€ไปฅๅฝ“ๆœ‰sum[i,j] = 0ๆ—ถ => [i,j]ไธญๆœ‰ๅŒ็ญ‰็š„1 ๅ’Œ 0๏ผŒ same as 325. Maximum Size Subarray Sum Equals k
529. Minesweeper O(m * n) O(m + n) Medium โŒ ็ฎ€ๅ•DFS
538. Convert BST to Greater Tree O(n) O(h) Easy ๐Ÿ˜ๆณจๆ„Python BFS
543. Diameter of Binary Tree O(n) O(h) Easy ๐Ÿ”ๅ…ˆๅฐฝๅฏ่ƒฝdfs๏ผŒๅ†ๆฏ”่พƒheight ไผšๆ›ดๅฟซ
563. Binary Tree Tilt O(n) O(n) Easy โŒๆ€่ทฏ่ทŸ543. Diameter of Binary Tree ไธ€ๆ ท
572. Subtree of Another Tree O(m * n) O(h) Easy ๐Ÿ˜ seralization
606. Construct String from Binary Tree O(n) O(h) Easy โŒ Easy Recursion
617. Merge Two Binary Trees O(n) O(h) Easy ๐Ÿ˜
623. Add One Row to Tree O(n) O(h) Medium ๐Ÿ˜š
637. Average of Levels in Binary Tree O(n) O(h) Easy โŒ
652. Find Duplicate Subtrees O(n) O(n) Medium ๐Ÿ˜๐Ÿ” Seralization(String็š„memory ๆ˜ฏ O(n^2)) / Hash, C++ ๆœ‰ๅฎšไน‰hash. ๆณจ: ๆ— ้กปseralize ๅฎŒๆ•ดๅŽๅ†ๅฏปๆ‰พ, analysis
653. Two Sum IV - Input is a BST O(n) O(h) Easy ๐Ÿ˜๐Ÿ”ๅฏไปฅ่€ƒๆ€Žไนˆๅ†™ BST Iterator
654. Maximum Binary Tree O(n) O(h) Medium ๐Ÿ˜๐Ÿ”๐Ÿ’ก descending stack:
  • ๅฆ‚ๆžœ็Žฐๅœจๆ•ฐ num[i] ๅฐไบŽstack top๏ผŒstack.top->right = new TreeNode(nums[i])
  • ๅฆ‚ๆžœ็Žฐๅœจnum[i] ๅคงไบŽstack top๏ผŒๅฐฑไธๆ–ญpop stack ๆ‰พๆœ€ๅŽไธ€ไธชๅฐไบŽnums[i]็š„node๏ผŒๆŠŠๆœ€ๅŽ็š„node ไฝœไธบnums[i]็š„left child
655. Print Binary Tree O(n) O(h) Medium Mathๆ‰พ่ง„ๅพ‹
662. Maximum Width of Binary Tree O(n) O(h) Medium โŒ Math ๆ‰พ่ง„ๅพ‹, ้€ป่พ‘่ทŸ655. Print Binary Tree็ฑปไผผ
677. Map Sum Pairs O(n) O(t) Medium โŒSimple Trie
684. Redundant Connection O(n) O(n) Medium ๐Ÿ”Union Find ๅฆ‚ๆžœไธคไธชnode ่ฟžๆŽฅไน‹ๅ‰ๅ‘็Žฐparent ๅทฒ็ปไธ€ๆ ท๏ผŒ่กจ็คบไน‹ๅ‰ไธคไธชnodesๅทฒ็ป่ฟžๆŽฅ๏ผŒๅฆ‚ๆžœๅ†่ฟžๆŽฅedge๏ผŒไผšๆž„ๆˆcycle
685. Redundant Connection II O(n) O(n) Hard Union Find ๆณจๆ„ๆž„ๆˆtree ็š„ๆกไปถ, ไธ่ƒฝๆœ‰ไธ€ไธชchild ่ฟžไธŠไธคไธชparent, ็„ถๅŽๅŽปๆމ่ฟ™ไธชchildไธ€ไธช้“พ๏ผŒไฟ่ฏ้ƒฝๆ˜ฏไธ€ไธชchildๅฏนๅบ”ไธ€ไธชparent, ๅ†็œ‹ๆœ‰ๆฒกๆœ‰cycle, ๆฒกๆœ‰cycle่กจ็คบๅŽป้“พๅŽปๆˆๅŠŸไบ†, ๆœ‰cycle ่กจ็คบๅŽป้“พๅŽป้”™ไบ†
687. Longest Univalue Path O(n) O(h) Easy ๐Ÿ˜ Really good Recussive Question!
699. Falling Squares O(nlogn) O(n) Hard ๐Ÿ˜Good Question! ่‹ฅๆƒณๆ‰พ็‚นๅฑžไบŽ ๅ“ชไธช่Œƒๅ›ดไน‹ไธญ ๆฏ”ๅฆ‚ 3โˆˆ (1,5) or (7,9) , ็”จmap + binary search
  • solution 1: ่งฃๆณ•ไธŽ 218. The Skyline Problem็›ธไผผ, ็”ป่ฝฎๅป“
  • Solution 2: Segment Tree using lazy initialization: ้œ€่ฆๆณจๆ„updateๅณไฝฟไธๅœจ่Œƒๅ›ดๅ†…๏ผŒไนŸ่ฆ่ฟ”ๅ›žroot.val, update่ฟ˜่ฆๆ›ดๆ–ฐroot.valไธบmaxๅ€ผ
814. Binary Tree Pruning O(n) O(h) Medium ๐Ÿ˜Really good question!
850. Rectangle Area II O(nlogn) O(h) Hard ๐Ÿ”๐Ÿ’ก่ทŸ699. Falling Squaresๆ€่ทฏๆœ‰็‚นๅƒ, ๆ นๆฎheightไธ€ๅฑ‚ไธ€ๅฑ‚็š„็ฎ—ๅฝ“ๅฑ‚้•ฟๆ–นไฝ“้ข็งฏ,็ฎ—ๅฎŒ้ข็งฏๅŽๆ›ดๆ–ฐไธŠไธ€ๅฑ‚็š„ๅบ•curx
863. All Nodes Distance K in Binary Tree O(n) O(h) Medium ๐Ÿ˜๐Ÿ˜Really good question! ไธๅฟ…็บ ็ป“ไบŽone pass, ้œ€่ฆchild -> parent map
865. Smallest Subtree with all the Deepest Nodes O(n) O(h) Medium ๐Ÿ” ่‹ฅleft, right child ้ƒฝๆ˜ฏๆœ€ๆทฑ็š„, ๅˆ™rootไธบ ๆœ€ๆทฑ็š„node
889. Construct Binary Tree from Preorder and Postorder Traversal O(n) O(h) Medium ๐Ÿ˜๐Ÿ˜
  • Solution 1: ้šพ็‚นๆ˜ฏๆ‰พๅˆฐ left ๅ’Œright็š„่พน็•Œ: ๅ‡ๅฎš้ƒฝๆŠŠไธ‹ไธ€ไธชassign ็ป™left
  • ็”จstack
1008. Construct Binary Search Tree from Preorder Traversal O(n) O(h) Medium ๐ŸŽ…Stack, Recursion, Morris Traversal
1028. Recover a Tree From Preorder Traversal O(n) O(h) Hard ๐Ÿ˜š stack / DFS, stack้€ป่พ‘็ฑปไผผ889. Construct Binary Tree from Preorder and Postorder Traversal
1409. Queries on a Permutation With Key O(nlogn) O(n) Medium BIT, Fenwick Tree, ๐ŸŽ… How to Build FenwickTree
ย ย ย ย ย ย ย  ย ย ย  ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย 

Math

Title Time Space Difficulty Algorithm Note
007. Reverse Integer O(1) O(1) Easy
009. Palindrome Number O(1) O(1) Easy
012. Integer to Roman O(n) O(1) Medium
013. Roman to Integer O(n) O(1) Easy
964. Least Operators to Express Number O(logn) O(logn) Hard ๐ŸŽ…๐ŸŽ…๐ŸŽ…
1360. Number of Days Between Two Dates O(1) O(1) Easy
1362. Closest Divisors O(sqrt(n)) O(1) Medium
1363. Largest Multiple of Three O(n) O(1) Hard
1390. Four Divisors _O(n * sqrt(n)) _ O(1) Medium โŒ

String

Title Time Space Difficulty Algorithm Note
005.Longest Palindromic Substring O(n) O(n) Medium ๐Ÿ” manacher(้ฉฌๆ‹‰่ฝฆ็ฎ—ๆณ•), mx่กจ็คบๅฝ“ๅ‰ๆœ€้•ฟๅ›žๆ–‡ๅค–ๅณไพง็ฌฌไธ€็‚น, idๆ˜ฏๅฝ“ๅ‰ๅ›žๆ–‡ไธญๅฟƒ, p[i]่กจ็คบๅฝ“ๅ‰ๆœ€้•ฟๅ›žๆ–‡, if i<mx, p[i] = min(p[2id-i], p[i])
006. ZigZag Conversion O(n) O(n) Medium
  • ๆŠŠstring ๅพช็Žฏpushๅˆฐไธ€ไธช้•ฟๅบฆไธบnrow็š„vectorๅฝ“ไธญ
  • ็”จstep = 2*nrows - 2 ๆŽงๅˆถๆฏๆฌกjump step, ๅˆฐไธญ้—ด่กŒ็œ‹ๆ˜ฏๅฆjump stepไน‹้—ดๆœ‰ๅคน็š„ๅ…ƒ็ด 
008. String to Integer (atoi) O(n) O(1) Easy C++ๅฏไปฅ็”จfind_first_not_of
014. Longest Common Prefix O(n) O(1) Easy loopๆ‰€ๆœ‰ๆ•ฐ็ฌฌ0ไฝๅˆฐ็ฌฌiไฝ๏ผŒ็›ดๅˆฐไธ็›ธๅŒ,่ฟ”ๅ›žstr[0].substr(0,i)
028. Implement strStr() O(n+k) O(k) Easy kmp algorithm: prefix array[i]่กจ็คบi็‚น็š„ๆœ€้•ฟ็š„prefix ไนŸๆ˜ฏsuffix้•ฟๅบฆ ๆฏ”ๅฆ‚"ABA", ็ฌฌไธ‰ไธชa็š„ๆœ€้•ฟ็š„prefix ไนŸๆ˜ฏsuffix ็š„้•ฟๅบฆๆ˜ฏ1 A ่€Œprefix array[i], ไฝœไธบindex, ๆ˜ฏๅฝ“ๅ‰ๆœ€้•ฟprefix ไนŸๆ˜ฏsuffix ็š„ไธ‹ไธ€ไฝ
038. Count and Say O(n * 2^n) O(n2^n) Easy C++ find_if + bind1st
043. Multiply Strings O(m*n) O(m+n) Medium C++ transform, ๅฟ…้กป้ƒฝไปŽไธชไฝๆ•ฐ(ไนŸๅฐฑๆ˜ฏstring็š„ๆœ€ๅŽไธ€ไฝๅผ€ๅง‹็ฎ—, ๅฆๅˆ™carryๅฏ่ƒฝไผš่ถ…่ฟ‡10), back_inserter, ็›ธๅฝ“ไบŽๆŒ‰็…งๅŽŸๆฅไปŽๅคดๅˆฐๅฐพ้กบๅบpush back
058. Length of Last Word O(n) O(1) Easy C++ find if or find if + bind1st or string find_last_not_of + find_last_of
067. Add Binary O(n) O(1) Easy string ๅŠ ๆณ•, ่ทŸ415. Add Strings ๅ’Œ306. Addictive Number ็ฑปไผผ
068. Text Justification O(n) O(1) Hard not a hard question, ่ทŸ725. Split Linked List in Parts ็ฑปไผผ
125. Valid Palindrome O(n) O(1) Easy C++ ่ทณ่ฟ‡้žisalnum็š„
151. Reverse Words in a String O(n) O(1) Medium ๅ…ˆreverseๆ‰€ๆœ‰็š„, ๅ†reverseๅ•ไธชๆฏไธช่ฏ, ่ฎฐๅฝ•ๆ€ปๅ…ฑlen,ๆœ€ๅŽ็”จๆฅๆˆชๅ–, C++ find_first_not_of + find_first_of
165. Compare Version Numbers O(n) O(1) Medium c++ ็ฎ—ๅฝ“ๅ‰version1,2็š„substr็š„ๆ•ฐ๏ผŒๅฆ‚ๆžœๅ…ถไธญไธ€ไธช็ขฐๅˆฐ็ป“ๅฐพ๏ผŒ่ฎพๅฝ“ๅ‰ๆ•ฐไฝ0ใ€‚ c, ๅฏไปฅ็”จc_str() + strtol; python3 zip(*itertools.zip_longest(*splits, fillvalue=0))
214. Shortest Palindrome O(n) O(n) Hard ๐Ÿ”ๅฏไปฅๆŠŠๆญค้ข˜ๆขไธ€็ง้—ฎๆณ•: ไปฅindex0ๅผ€ๅง‹ๆœ€้•ฟ็š„้ƒจๅˆ†palindrome ็š„้•ฟๅบฆ, ้ƒจๅˆ†ๆœ€้•ฟ็š„palๅŽ้ข็š„ๆމไธช+s = ็ญ”ๆกˆ
  • KMP: s+"#"+reverse(s), prefix arrayๆœ€ๅŽไธ€ไฝๆ˜ฏ้ƒจๅˆ†ๆœ€้•ฟ็š„pal็š„้•ฟๅบฆ, kmp prefix ๅณๆ˜ฏsuffix๏ผŒpalๆ˜ฏๆމไธชไนŸ็›ธ็ญ‰, ๆ‰€ไปฅๆœ€ๅŽไธ€ไฝๆ˜ฏ้ƒจๅˆ†ๆœ€้•ฟ
  • ้ฉฌๆ‹‰่ฝฆ(manacher): ไธๆ–ญๆ‰พๆœ€ๅคง็š„ๅ›žๆ–‡้•ฟ๏ผŒไฝ†ไธ€่พนๆ›ดๆ–ฐๅณ่พน็•Œๆ—ถ, ๅชๆ›ดๆ–ฐmxlen ๅฝ“p[i]==i็š„ๆ—ถๅ€™, ๆœ€้•ฟๅ›žๆ–‡ไปŽ0ๅผ€ๅง‹
242. Valid Anagram O(n) O(1) Easy ็ปๅ…ธ้ข่ฏ•้ข˜
273. Integer to English Words O(1) O(1) Hard ๆ— ่Š็š„recursion
306. Addictive Number O(n^3) O(n) Medium recursion ไปŽindex0ๅผ€ๅง‹่ฏ•ๆ‰€ๆœ‰็š„digitๅฏ่ƒฝๆ€ง็›ดๅˆฐๆˆๅŠŸ, ๆฏ”ๅฆ‚ๅผ€ๅง‹ๆ˜ฏไธ€ไฝ+ไธคไฝ, ่ฟ˜ๆ˜ฏไธ‰ไฝ+ไธคไฝ , ้œ€่ฆไธ€ไธชstring add็š„help function; python ๅฏไปฅ็”จitertools.combination + startswith, ่ทŸ067. Add Binary ๅ’Œ415. Add Strings ็ฑปไผผ, ๅชไธ่ฟ‡ๅคšไธชrecursion
383. Ransom Note O(n) O(n) Easy Hash map
405. Convert a Number to Hexadecimal O(n) O(1) Easy ๆœ€ๅŽ็ป“ๆžœ้œ€่ฆreverse๏ผŒๅ› ไธบๅ…ˆๆ’ๅ…ฅๆœ€ๅฐ็š„๏ผŒๆณจๆ„่ดŸๆ•ฐ็š„, -1>>4 = -1, ๆ‰€ไปฅwhileๅŠ ไธชๆกไปถ res.length()!=sizeof(int)*2
415. Add Strings O(n) O(1) Easy stringๅŠ ๆณ•๏ผŒ่ทŸ067. Add Binary ๅ’Œ306. Addictive Number ็ฑปไผผ
420. Strong Password Checker O(n) O(1) Hard Brain Storm ่ฏฆ่งC++ code ่งฃ้‡Š
434. Number of Segments in a String O(n) O(1) Easy ๐Ÿ”, ๆ นๆฎs[i] ๅ’Œ s[i-1]ๅˆคๆ–ญ, or s[i] ๅ’Œ s[i+1]ๅˆคๆ–ญ
443. String Compression O(n) O(1) Easy two pointer + num reverse
459. Repeated Substring Pattern O(n) O(n) Easy KMP
468. Validate IP Address O(1) O(1) Medium ๆณจๆ„IPv4 ๅ’ŒIPv6็š„ๅฎšไน‰(c++ code้‡Œ), ๅˆคๆ–ญไธ€ไธชcharๆ˜ฏไธๆ˜ฏ็ฌฆๅˆๅๅ…ญ่ฟ›ๅˆถ็”จisxdigit(c)
520. Detect Capital O(1) O(1) Easy C++ count_if; Python istitle()็œ‹ๆ˜ฏไธๆ˜ฏๅชๆœ‰้ฆ–ๅญ—ๆฏๅคงๅ†™
521. Longest Uncommon Subsequence I O(min(a, b)) O(1) Easy ้ข˜ๅ‡บ็š„็ฅž็ป็—…๏ผŒ้€—ไฝ ็Žฉๅ„ฟ
522. Longest Uncommon Subsequence II _O(l * n^2) _ O(1) Medium ๐Ÿ”ๆŒ‰็…งๅญ—ๆฏ้•ฟๅบฆsort, ็„ถๅŽไธ€ไธชไธ€ไธช็œ‹str๏ผŒๆœ‰ๆฒกๆœ‰ๅœจlistไธญๆœ‰subsequence๏ผŒๆฒกๆœ‰็š„่ฏ, return ่ฟ™ไธชstr้•ฟๅบฆ,็›ดๅˆฐๅ…จ้ƒจsearchๅฎŒ, return -1 or C++ equal_range + count_if , python ๅฏไปฅiter()
524. Longest Word in Dictionary through Deleting O((d * l) * logd) O(1) Medium ๆŒ‰็…งๅญ—ๆฏ้•ฟๅบฆsort,ๅฆ‚ๆžœ้•ฟๅบฆไธ€ๆ ท๏ผŒๆŒ‰็…งalphabet sort, ๆ‰พๅˆฐ็ฌฌไธ€ไธช็ฌฆๅˆ็š„ ๐Ÿ”python, max with key, min with key, filter, iter + next with default
539. Minimum Time Difference O(nlogn) O(n) Medium C++ transform ๆŠŠๆ‰€ๆœ‰ๆ—ถ้—ดๅ˜ๅˆ†้’Ÿ, ็„ถๅŽๆŒ‰minute sort, ็ญ”ๆกˆๅฐฑๅ‡บ่‡ชๆ‰€ๆœ‰minute[i+1] - minute[i] or 1440 +minute[0] - minute.back()
541. Reverse String II O(n) O(1) Easy
551. Student Attendance Record I O(n) O(1) Easy
556. Next Greater Element III O(1) O(1) Medium ๅฏไปฅ็”จascending stack or ไธคไธชfor loop, ๅฏปๆ‰พi็‚นๅพ€ๅŽๆœ€ๅŽไธ€ไธชๆฏ”i็‚นๅคง็š„ๆ•ฐ(ไนŸๆ˜ฏๆฏ”iๅคง,ๆœ€ๆŽฅ่ฟ‘i็š„ๆ•ฐ)(index j), swap(s[i], s[j]), ่ฟ™ๆ ทs[i]ๅŽ้ข็š„ๆ•ฐๅˆๅคงๅˆฐๅฐๆŽ’ๅบ็š„, ๆŠŠiๅพ€ๅŽ็š„ๆ•ฐๅˆฐendๅ…จ้ƒจreverseๅŽๅ˜ๆˆInt, ๅฐฑๆ˜ฏ็ญ”ๆกˆ, ่ทŸ031. Next Permutationๆ€่ทฏ็ฑปไผผ
564. Find the Closest Palindrome O(l) O(l) Hard Brain Storm: ๆœ€ๆŽฅ่ฟ‘็š„palๅชๅฏ่ƒฝ5ไธญ้€‰ไธ€, 100..001(l.size()+1), 99..99(l.size()-1), or string็š„ๅ‰ๅŠ้ƒจๅˆ† +1, +0, -1 ๅŠ ไธŠๅ‰ๅŠ้ƒจๅˆ†็š„reverse(ๅฆ‚ๆžœ่ตทๅง‹้•ฟๅบฆๆ˜ฏๅฅ‡ๆ•ฐ๏ผŒreverseไธๅŒ…ๆ‹ฌๅ‰ๅŠ้ƒจๅˆ†ๆœ€ๅŽไธ€ไธช๏ผŒๅฆ‚ๆžœ้•ฟๅบฆๆ˜ฏๅถๆ•ฐ๏ผŒ้ƒฝๅŒ…ๆ‹ฌๅœจๅ†…)
591. Tag Validator O(n) O(n) Hard cdata ๅฟ…้กปไปฅ ๅทฒ ]]>็ป“ๆŸ, recursion ๆ‰พๆ˜ฏไธๆ˜ฏvalid tag, valid cdata, valid tagname
647. Palindromic Substrings O(n) O(n) Medium ๐Ÿ” manacher(้ฉฌๆ‹‰่ฝฆ็ฎ—ๆณ•), ๅœจsnewไธญ p[i]่กจ็คบไปฅidไธบไธญๅฟƒๆœ€้•ฟๅ›žๆ–‡๏ผŒๅˆฐi็‚น๏ผŒres += p[i] /2
648. Replace Words O(n) O(t) Medium ๐Ÿ” Trie; python ๅฏไปฅ็”จreduce + dict.__getitem__
657. Judge Route Circle O(n) O(1) Easy
678. Valid Parenthesis String O(n) O(1) Medium ๐Ÿ”Three Solutions
  • ็”จlow ๅ’Œhigh: low ่กจ็คบๆŠŠ '*' ๅฝ“ๆˆ ')', high: ่กจ็คบๆŠŠ '*' ๅฝ“ๆˆ'(', ๅฆ‚ๆžœhighๅฐไบŽ0๏ผŒ่กจ็คบๆœ‰ๅคชๅคš็š„')' '(' + '*' = high < ')'
  • ็”จไธคไธชstack ๅˆ†ๅˆซ่ฎฐๅฝ• '(' ๅ’Œ '*'็š„ไฝ็ฝฎ, ๅฆ‚ๆžœๅฝ“ๅ‰ๆ˜ฏ')', ๅ…ˆpop '(' ๅ†pop '*'; ๆœ€ๅŽ็œ‹'(' ๆœ‰ๆฒกๆœ‰ๅฏนๅบ”indexๅพ€ๅŽ็š„็š„ '*'ๅฏไปฅpopๆމ,
  • Two pass solution ไปŽๅทฆๅ‘ๅณ็œ‹ๆ˜ฏไธๆ˜ฏๆ‰€ๆœ‰็š„')' ้ƒฝๆœ‰ๅฏนๅบ”็š„ '(' ๅ’Œ '*', ๅ†ไปŽๅณๅ‘ๅทฆ็œ‹ๆ˜ฏไธๆ˜ฏๆ‰€ๆœ‰็š„ '(', ้ƒฝๆœ‰ๅฏนๅบ”็š„ ')' ๅ’Œ' *'
680. Valid Palindrome II O(n) O(1) Easy ๐Ÿ”ไธคไธชpointer, ๆฃ€ๆŸฅs[i] == s[j]?, ้‡ๅˆฐไธ็ญ‰ๆ—ถ๏ผŒๅ†็œ‹s[i+1, j], or s[i, j-1]ๆ˜ฏไธๆ˜ฏpal
686. Repeated String Match O(n+m) O(n) Easy ๐Ÿ”
  • Kmp: ็„ถๅŽไธคไธชpointer, ไธ€ไธชpointer i ่ฎฐๅฝ•A็š„ไฝ็ฝฎ๏ผŒไธ€ไธชpointer j่ฎฐๅฝ•B็š„ไฝ็ฝฎ๏ผŒๆฏๆฌกๅฏนๆฏ” A[(i + j)%A.size()] ๆ˜ฏๅฆ็ญ‰ไบŽB[j] ็ญ‰ไบŽๅฐฑ++j., ็›ดๅˆฐ j = b.size() return ceil((i+j)/a.size())
  • rabin-karp algorithm, ๅฏปๆ‰พๆœ€็Ÿญ็š„้•ฟๅบฆไธ€็›ดๅˆฐๆœ€ๅคง้•ฟๅบฆ็š„hash
696. Count Binary Substrings O(n) O(1) Easy manacher(้ฉฌๆ‹‰่ฝฆ)็ฎ—ๆณ•็š„ๅ˜ๅฝข
720. Longest Word in Dictionary O(n) O(t) Easy Trie or ๅ…ˆๆŒ‰้•ฟๅบฆsort, ้•ฟๅบฆ่ถŠ็Ÿญ, ๆŽ’ๅ‰้ข, loop word, loop s[i][0,len), ็œ‹ๆ˜ฏไธๆ˜ฏๆฏไธชsubstr้ƒฝๅœจ๏ผŒ้ƒฝๅœจ่ฏinsert to hashset & update result
722. Remove Comments O(n) O(k) Medium
791. Custom Sort String O(n) O(k) Medium ๅฏไปฅๅฝ“็ปๅ…ธ้ข่ฏ•้ข˜, ไธ‰็ง่งฃๆณ•:
  1. Custom Sort (or STL inserter + make_pair)
  2. Bucket Sort
  3. Priority Queue
796. Rotate String O(n) O(1) Easy ๐Ÿ”ไธค็งkmp็š„่งฃ,
  • ่ทŸ686. Repeated String Matchไธ€ๆ ท, ่ฏฆ่ง686็š„C++ code ่งฃ้‡Š
  • pattern = B, text = A + A, ็œ‹textไธญๆœ‰ๆฒกๆœ‰pattern
804. Unique Morse Code Words O(n) O(n) Easy Easy one unordered_set
806.Number of Lines To Write String O(n) O(1) Easy Easy one but stupid question description
809. Expressive Words O(n+s) O(1) Medium Two pointer: ๅฆ‚ๆžœword[i]!=S[j] ็š„ๆ—ถๅ€™๏ผŒ ็œ‹S็š„j-1, j, j+1ๆ˜ฏไธๆ˜ฏ่ฟž็ปญๆ˜ฏไธ‰ไธช๏ผŒ่‹ฅไธๆ˜ฏ๏ผŒๅ†็œ‹่ฟ‡ๅŽปๆ˜ฏไธๆ˜ฏ่ฟž็ปญไธ‰ไธช๏ผŒ่‹ฅไธๆ˜ฏ๏ผŒbreak
816. Ambiguous Coordinates O(n^3) O(n) Medium ๐Ÿ”้€‰ๆ‹ฉๅฐๆ•ฐ็‚น็š„ๅ…ณ้”ฎๆ˜ฏ ไธ่ƒฝๅทฆ้ขไฝ0๏ผŒ ๅณ้ข็ป“ๆŸไนŸๆ˜ฏ0๏ผŒๆฏ”ๅฆ‚00.1230ไธๅฏไปฅ,ไฝ†ๆ˜ฏๅณไฝฟๅทฆ้ข็ญ‰ไบŽ0๏ผŒ ๅณ้ขๆœ€ๅŽไนŸไธๅฏไปฅๆ˜ฏ0
819. Most Common Word O(n+m) O(m+n) Easy
820. Short Encoding of Words O(n) O(t) Medium
  • Trie: ็œ‹ๅถๅญๆœ‰ๆฒกๆœ‰child
  • sort string vector, ๅช็”จๅฏนๆฏ”s[i] ๅ’Œ s[i+1]
824. Goat Latin O(n + w^2) O(l) Easy stringstream ไฝœไธบstring output
831. Masking Personal Information O(1) O(1) Easy C++ transform ๆŠŠๆ‰€ๆœ‰ๅญ—ๆฏ้ƒฝๅฐๅ†™, s[0] ๅ˜ๆˆstring ๅฏไปฅ็”จ s.substr(0,1) or string(1,S[0])
833. Find And Replace in String O(m+n) O(n) Medium ๅ…ˆsort indexes,็„ถๅŽไปŽๅŽๅพ€ๅ‰loop S,่ฟ™ๆ ทๅฏไปฅไฟๆŒSๅ‰้ข็š„indexไธๅ˜, python ๅฏไปฅ็”จzip + startswith
839. Similar String Groups O(n^2 * l) O(n) Easy ๐Ÿ” Union Find Disjoint Set with Rank Heuristic, string ๆ‰€ๅœจไฝ็ฝฎไธบindex
848. Shifting Letters O(n) O(1) Medium ๅŠ ็š„ๆ—ถๅ€™ๅŠๆ—ถ%26, ๅฐๅฟƒoverflow
859. Buddy Strings O(n) O(1) Easy ๅˆคๆ–ญๆกไปถ: 1.้•ฟๅบฆไธไธ€ๆ ท๏ผŒfalse๏ผŒ2. ๅฆ‚ๆžœa == b๏ผŒๆœ‰ๆฒกๆœ‰้‡ๅค็š„ๅญ—ๆฏ๏ผŒๆœ‰็š„่ฏtrue, ๆฒกๆœ‰false, 3, ๅฆ‚ๆžœไธไธ€ๆ ท็š„ไฝ็ฝฎไธชๆ•ฐไธ็ญ‰ไบŽ2, ๆˆ–่€…a[diff[0]]!=b[diff[1]] or a[diff[1]]!=a[diff[1]] ่ฟ”ๅ›žfalse, ๅฆๅˆ™ๆ˜ฏtrue
1374 Generate a String With Characters That Have Odd Count O(n) O(1) Easy โŒ
1392. Longest Happy Prefix O(n) O(n) Hard KMP, Rolling Hash
1408. String Matching in an Array O(n) O(n) Easy KMP, Rolling Hash
1410. HTML Entity Parser O(n) O(t) Medium
1417. Reformat The String O(n) O(1) Easy
ย ย ย ย ย ย ย  ย ย ย  ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย 

Regular Expression Summary

summary
  • regex_match ๆ˜ฏไปŽๅคดๅผ€ๅง‹ๅˆฐ็ป“ๅฐพ็ป“ๆŸ้ƒฝ่ฆmatch็š„, ๅฏไปฅ็”จstring + regex, regex_match(string, regex()); or Iterator + regex: regex_match ( s.begin(), s.end(), regex()), ่ฟ”ๅ›žๅ€ผmatchๆ˜ฏไธๆ˜ฏๆˆๅŠŸ
  • regex_search ๆ˜ฏๅฏปๆ‰พentire string, ๆœ‰ๆฒกๆœ‰substringๆปก่ถณregex็š„, ๅฏไปฅ็”จstring + regex, regex_search(string, regex()) or Iterator + regex: regex_search ( s.begin(), s.end(), regex())
  • regex_replace ๆ˜ฏๅฏปๆ‰พentire string match pattern็š„้ƒจๅˆ†,็”จๅ…ถไป–็š„stringไปฃๆ›ฟๅฎƒ, ่ฟ”ๅ›žๅ€ผๆ–ฐ็”Ÿๆˆ็š„string, replace ไธไผšไฟฎๆ”นๅŽŸๆฅstring sใ€‚ regex_replace(s, regex(), "geek"); ๆˆ–่€…ๆŠŠๆ›ฟไปฃ็š„็”Ÿๆˆๅˆฐๅฆไธ€ไธชๆ–ฐ็š„string: string result; regex_replace(back_inserter(result), s.begin(), s.end(), regex(), "geek");

    • reference reference2
    • +: ๅ‰้ข็š„ๅญ่กจ่พพๅผๅ‡บ็Žฐไธ€ๆฌกๆˆ–ๅคšๆฌก ro+b๏ผŒๅฏไปฅๅŒน้… roobใ€robใ€rooob
    • *: ๅ‰้ข็š„ๅญ่กจ่พพๅผๅ‡บ็Žฐ0ๆฌกใ€ๆˆ–1ๆฌกใ€ๆˆ–ๅคšๆฌกro+b๏ผŒๅฏไปฅๅŒน้… rbใ€robใ€rooob
    • ?: ๅ‰้ข็š„ๅญ่กจ่พพๅผๅ‡บ็Žฐ0ๆฌกใ€ๆˆ–1ๆฌก colou?r๏ผŒๅฏไปฅๅŒน้… colorใ€colour
    • {n} n ๆ˜ฏไธ€ไธช้ž่ดŸๆ•ดๆ•ฐใ€‚ๅŒน้…็กฎๅฎš็š„ n ๆฌกใ€‚ไพ‹ๅฆ‚๏ผŒ'o{2}' ไธ่ƒฝๅŒน้… "Bob" ไธญ็š„ 'o'๏ผŒไฝ†ๆ˜ฏ่ƒฝๅŒน้… "food" ไธญ็š„ไธคไธช oใ€‚
    • {n,} n ๆ˜ฏไธ€ไธช้ž่ดŸๆ•ดๆ•ฐใ€‚่‡ณๅฐ‘ๅŒน้…n ๆฌกใ€‚ไพ‹ๅฆ‚๏ผŒ'o{2,}' ไธ่ƒฝๅŒน้… "Bob" ไธญ็š„ 'o'๏ผŒไฝ†่ƒฝๅŒน้… "foooood" ไธญ็š„ๆ‰€ๆœ‰ oใ€‚'o{1,}' ็ญ‰ไปทไบŽ 'o+'ใ€‚'o{0,}' ๅˆ™็ญ‰ไปทไบŽ 'o*'ใ€‚
    • {n,m} m ๅ’Œ n ๅ‡ไธบ้ž่ดŸๆ•ดๆ•ฐ๏ผŒๅ…ถไธญn <= mใ€‚ๆœ€ๅฐ‘ๅŒน้… n ๆฌกไธ”ๆœ€ๅคšๅŒน้… m ๆฌกใ€‚ไพ‹ๅฆ‚๏ผŒ"o{1,3}" ๅฐ†ๅŒน้… "fooooood" ไธญ็š„ๅ‰ไธ‰ไธช oใ€‚'o{0,1}' ็ญ‰ไปทไบŽ 'o?'ใ€‚่ฏทๆณจๆ„ๅœจ้€—ๅทๅ’Œไธคไธชๆ•ฐไน‹้—ดไธ่ƒฝๆœ‰็ฉบๆ ผใ€‚
    • | ๆŒ‡ๆ˜Žไธค้กนไน‹้—ด็š„ไธ€ไธช้€‰ๆ‹ฉใ€‚ๆฏ”ๅฆ‚ "A.|B" ๅŒน้… CAA ไนŸๅŒน้… CB
    • . ๅŒน้…้™คๆข่กŒ็ฌฆ \n ไน‹ๅค–็š„ไปปไฝ•ๅ•ๅญ—็ฌฆใ€‚ ๆฏ”ๅฆ‚A. ๅŒน้…AD
    • ^ ๅŒน้…่พ“ๅ…ฅๅญ—็ฌฆไธฒ็š„ๅผ€ๅง‹ไฝ็ฝฎ๏ผŒ้™ค้žๅœจๆ–นๆ‹ฌๅท่กจ่พพๅผไธญไฝฟ็”จ๏ผŒๆญคๆ—ถๅฎƒ่กจ็คบไธๆŽฅๅ—่ฏฅๅญ—็ฌฆ้›†ๅˆใ€‚ๆฏ”ๅฆ‚^A, ่กจ็คบๅญ—็ฌฆไปฅAๅผ€ๅง‹, ๆฏ”ๅฆ‚^[0-9] ่กจ็คบไธๅซๆœ‰ๆ•ฐๅญ—
    • $ ๅŒน้…่พ“ๅ…ฅๅญ—็ฌฆไธฒ็š„็ป“ๅฐพไฝ็ฝฎใ€‚ๅฆ‚ๆžœ่ฎพ็ฝฎไบ† RegExp ๅฏน่ฑก็š„ Multiline ๅฑžๆ€ง๏ผŒๅˆ™ $ ไนŸๅŒน้… '\n' ๆˆ– '\r'ใ€‚ๆฏ”ๅฆ‚C$ ๅญ—็ฌฆไธฒไปฅC็ป“ๅฐพ
    • \w ๅŒน้…ไปปไฝ•word character short version for [A-Za-z0-9_], \W is short for [^\w]ใ€‚
    • \s stands for "whitespace character" \S is the equivalent of [^\s]
    • \d is short for [0-9],[0-9] is not always equivalent to \d. In python3, [0-9] matches only 0123456789 characters, while \d matches [0-9] and other digit characters, for example Eastern Arabic numerals ู ูกูขูฃูคูฅูฆูงูจูฉ \D is the same as [^\d]
difference between () [],
  • [] denotes a character class. () denotes a capturing group.
  • [a-z0-9] -- One character that is in the range of a-z OR 0-9, (a-z0-9) -- Explicit capture of a-z0-9. No ranges.
  • a -- Can be captured by [a-z0-9]., a-z0-9 -- Can be captured by (a-z0-9) and then can be referenced in a replacement and/or later in the expression
    • .

Bit Manipulation

Title Time Space Difficulty Algorithm Note
136. Single Number O(n) O(1) Easy ็”จxor ^, Python Reduce one line
137. Single Number II O(n) O(1) Medium ๐Ÿ”
  • ็ฌฌไธ€ๆฌกๅ‡บ็Žฐ-> save it in "ones", ็ฌฌไบŒๆฌกๅ‡บ็Žฐ -> clear "ones" but save it in "twos" for later check, ็ฌฌไธ‰ๆฌกๅ‡บ็Žฐ -> try to save in "ones" but value saved in "twos" clear it.
  • loop through 32ไธชbit, ๆฏไธชbitๅ†loop nums, if bit & nums[i] => c++, ๅฆ‚ๆžœcไธๆ˜ฏ3ไธชๅ€ๆ•ฐ๏ผŒๆœ€็ปˆ็ป“ๆžœๅœจ็Žฐๅœจ่ฟ™ไธชbitไธŠไฝ1
190. Reverse Bits O(1) O(1) Easy ไธ€ไฝไธ€ไฝreverse bit, resๆฏๆฌกๅ‘ๅทฆ็งปๅŠจไธ€ไฝ๏ผŒnๅ‘ๅณ็งปๅŠจไธ€ไฝ
191. Number of 1 Bits O(n) O(1) Easy n = n & (n-1);
201. Bitwise AND of Numbers Range O(1) O(1) Medium ไธ€ไฝไธ€ไฝๆฏ”่พƒdigit๏ผŒ็›ดๅˆฐ็งปๅŠจkไฝm=n, ้‚ฃไนˆๆญคๆ—ถ็š„digitๆ˜ฏbitwise and็š„็ป“ๆžœ, res = m<<k
231. Power of Two O(1) O(1) Easy n = n & (n-1);
260. Single Number III O(n) O(1) Medium ๐Ÿ”ไธคไธชpass,็ฌฌไธ€ไธชpass, ้€š่ฟ‡Xor้œ€่ฆๅŒบๅˆ†a ๅ’Œ b็š„ๆ•ฐ c(ๆ˜ฏaไธŽbๅณ้ข็ฌฌไธ€ไฝไธไธ€ๆ ท็š„ๆ•ฐ), ็ฌฌไบŒๆฌกpass, ้€š่ฟ‡c&nums[i]ๅˆคๆ–ญๅšxor, ๆ‰พๅˆฐaๅ’Œb (binary ่ดŸๆ•ฐ)
268. Missing Number O(n) O(1) Medium Math, Swap, Xor
318. Maximum Product of Word Lengths O(n^2) O(n) Medium ๐Ÿ”ๅฏไปฅ็”จbitๆฅๅˆคๆ–ญไธคไธชstringๆ˜ฏไธๆ˜ฏๆœ‰้‡ๅˆ็š„ๅญ—ๆฏ, ็”จๆ•ฐๅญ—่กจ็คบstring, aๆ˜ฏ็ฌฌไธ€ไฝ่ขซset๏ผŒzๆ˜ฏ็ฌฌ26ไฝ่ขซset,
342. Power of Four O(1) O(1) Easy 4^n = (3+1)^n, ้™คไบ†ๅˆคๆ–ญ(n&n-1) , ่ฟ˜่ฆๅˆคๆ–ญn-1 ๆ˜ฏไธๆ˜ฏๅฏไปฅๆ•ด้™ค3
371. Sum of Two Integers O(1) O(1) Easy ๏ผˆa&b)<<1 ่กจ็คบ้œ€่ฆ็›ธๅŠ ่ฟ›ไฝ็š„๏ผˆไธคไธช1็›ธๅŠ ๏ผ‰, a ^ b ่กจ็คบ็›ธๅŠ ไธ่ฟ›ไฝ๏ผˆไฟ็•™ๅ•ไธช1๏ผ‰
389. Find the Difference O(1) O(1) Easy ๐Ÿ”ๆ‰พไธคไธชstringๅ”ฏไธ€ไธๅŒไธๅŒ็š„charๅฏไปฅ้€š่ฟ‡ xor
393. UTF-8 Validation O(n) O(1) Easy ็”จcountๅˆคๆ–ญๆ˜ฏไธๆ˜ฏ่ตท็‚น, count==0 ๆ˜ฏ่ตท็‚น
421. Maximum XOR of Two Numbers in an Array O(nlogk) O(n) Medium ๐Ÿ”
  • ไปŽ็ฌฌ32ไฝๅผ€ๅง‹ๅˆฐ็ฌฌ0ไฝ้€ๆธ็ผฉๅฐ่Œƒๅ›ด, ๆฏ”ๅฆ‚็ฌฌ5ไฝๆœ‰a,b,c,d ๅ››ไธชๆ•ฐxor้ƒฝๆ˜ฏๆœ€ๅคง็š„๏ผŒ็ฌฌๅ››ไฝๅฐฑๅฏ่ƒฝไผš็ผฉๅ‡ๅˆฐa,c; ๅˆฉ็”จๆ€ง่ดจ: a ^ b = c => a ^ c = b
  • Trie
461. Hamming Distance O(1) O(1) Easy ๅˆคๆ–ญๆœ‰ๅคšๅฐ‘bit, ไธŽ191. Number of 1 Bitsๅ’Œ 231. Power of Two็ฑปไผผ
462 Minimum Moves to Equal Array Elements II O(nlogn) O(1) Medium ๐Ÿ”Meeting point, ๅ…ˆsort๏ผŒ็„ถๅŽ้€ไธช็”จๆœ€ๅคงๅ‡ๅŽปๆœ€ๅฐ, e.g [3,6,9], ไธ็ฎกไธญ้—ด็‚นๅœจๅ“ช๏ผŒ้ƒฝ่ฆ็ฃจๅนณ9-3=6็š„ๅทฎ่ท
476. Number Complement O(1) O(1) Easy
477. Total Hamming Distance O(nlogk) O(1) Easy ็”ฑ็ฌฌ32ไฝๅˆฐ็ฌฌ0ไฝ๏ผŒloopๆฏไธชbit๏ผŒๆ•ฐๅฝ“ๅ‰bitไฝไธบ1็š„ไธชๆ•ฐไธบbitcount, ็ป“ๆžœ res+= bitcount*(size-countsize), ไธŽ421. Maximum XOR of Two Numbers in an Array็ฑปไผผ
645. Set Mismatch O(n) O(1) Easy
  • bit Xor:ไธŽ260. Single Number III ่งฃๆณ•ไธ€ๆ ท, ็ฌฌไธ€ๆฌกpass,ๆ‰พๅˆฐไธคไธชๆ•ฐ็š„xor = c, c & (-c)ๆ˜ฏunique็š„digit, ็ฌฌไบŒๆฌกpassๅˆ†ๅˆซๆ‰พๅˆฐ่ฟ™ไธคไธชๆ•ฐ๏ผŒ็ฌฌไธ‰ๆฌกpass่ฐƒๆ•ดไธคไธชๆ•ฐreturn็š„้กบๅบ
  • ๆ”นๅ˜nums[abs(nums[i])-1] ไธบ่ดŸๆ•ฐ, ๅฆ‚ๆžœๅ‘็Žฐๆ–ฐๆ‰พๅˆฐ็š„ๅทฒ็ปไธบ่ดŸๆ•ฐ, ่ฏๆ˜Žๆ˜ฏ้‡ๅค็š„๏ผŒ็ฌฌไบŒๆฌกpass, ๅฆ‚ๆžœๅ‘็ŽฐๆŸไฝไธบๆญฃๆ•ฐ, ไปฃ่กจๆ˜ฏmissing็š„
693. Binary Number with Alternating Bits O(1) O(1) Easy ๐Ÿ”
762. Prime Number of Set Bits in Binary Representation O(R-L) O(1) Easy loop[L,R],ๆ•ฐๆฏไธชๆ•ฐๅคšๅฐ‘ไธชbit๏ผŒๅ› ไธบlog2(10^6) < 16, ไบ‹ๅ…ˆๆŠŠๆ‰€ๆœ‰็š„primeๅญ˜ๅˆฐhash set้‡Œ้ข, ็œ‹็Žฐๅœจbitๆ•ฐๆ˜ฏไธๆ˜ฏ่ดจๆ•ฐ๏ผŒif so res++, ่ฟ˜ๅฏไปฅ็”จ __builtin_popcountl(n); bitset<32>(n).count()
ย ย ย ย ย ย ย  ย ย ย  ย ย ย ย ย ย ย ย ย ย ย ย  C++ 0b่กจ็คบbinary number๏ผŒๆฏ”ๅฆ‚0b10 = 2, 0b111 = 7
python 0b่กจ็คบbinary number๏ผŒๆฏ”ๅฆ‚0b10 = 2, 0b111 = 7
  • ๆณจๆ„่ฟ็ฎ—้กบๅบ
  • +, - ๅ…ˆไบŽ &, |, <<, >>; ๆ‰€ไปฅไธ็”จๆ‹ฌๅท n&n-1
  • << >> == ๆ˜ฏไผ˜ไบŽ&,| ; ๅˆคๆ–ญ&, ้œ€่ฆๅŠ ๆ‹ฌๅท,ๆฏ”ๅฆ‚(n& n-1) == 0;
  • &,|ไผ˜ไบŽ && || ; (1&2 && 2) = 0 && 2 = false;
bitๆ•ฐ1็š„ไธชๆ•ฐ๏ผŒๅฏไปฅ็”จ n&(n-1); __builtin_popcountl(n); bitset<32>(n).count()

Hash Table

Title Time Space Difficulty Algorithm Note
001 Two Sum O(n) O(n) Easy
003. Longest Substring Without Repeating Characters O(n) O(n) Medium
030. Substring with Concatenation of All Words O((m+n)*k) O(n*k) Hard ๐Ÿ”k = word[0]้•ฟๅบฆ, n = ๆ•ดไธชwords้•ฟๅบฆ, m = S็š„้•ฟๅบฆใ€‚ๆœ€ๅฟซ็š„่งฃๆ˜ฏไธคไธชmap, map1่ฎฐๅฝ•words็š„ๆฏไธชstring,
036. Valid Sudoku O(9*9) O(9) Medium ๐Ÿ” ็”จbitๆฏ”่พƒๅฟซ๏ผŒๆฏ”ๅฆ‚iๅœจๆจช็€็ฌฌ2่กŒๅ‡บ็Žฐ, row[2]
049. Group Anagrams O(n * glogg) O(n) Medium ็ปๅ…ธ ้ข่ฏ•้ข˜, python listไธ่ƒฝไฝœไธบๅญ—ๅ…ธ็š„key,ไฝ†ๆ˜ฏtupleๅฏไปฅ
076. Minimum Window Substring O(n) O(k) Hard ๐Ÿ”sliding windows, ๆญค้ข˜ๆฒกๆœ‰็ช—ๅฃ็š„size๏ผŒ่ฆๅŽปๆ‰พๆœ€ๅฐ็š„size๏ผŒๅ…ณ้”ฎๆ˜ฏๅฆ‚ไฝ•็กฎๅฎšwindow valid๏ผŒ่ฎฐๅฝ•ๆฏๆฌกๆป‘ๅˆฐcur charไนŸๅœจTไธญๅ‡บ็Žฐ็š„ไธชๆ•ฐ๏ผŒๅฝ“ไธชๆ•ฐๆปก่ถณT.size(),่ฏๆ˜Žwindow valid๏ผŒ็„ถๅŽ้€ๆญฅ็ผฉๅฐstartไธŽi็š„่ท็ฆป๏ผŒๆ‰พๆœ€ๅฐ็‚น
149. Max Points on a Line O(n^2) O(n) Hard ๆฏๅˆฐไธ€็‚น๏ผŒ็ฎ—่ทŸๅˆซ็š„็‚น็š„ๆ–œ็އ๏ผŒๆณจๆ„1. ้‡ๅˆ็š„็‚น๏ผŒ2.ๆ–œ็އๆฒกๆœ‰็š„ๅฎšไน‰็š„็‚น, ๅœจๆฏไธ€็‚น้ƒฝ้‡ๆ–ฐๅปบไธ€ไธชhashmap
187. Repeated DNA Sequences O(n) O(n) Medium ๐Ÿ” rolling hash (rabin-karp),
  • A = 00, C = 01, G = 10, T = 11, iๅคงไบŽ9ๅŽ t>>2 & 0xfffff(2^18-1) ๅš&่ฟ็ฎ—
  • ็›ดๆŽฅๆŠŠA,C,G,T้ป˜่ฎค่ฝฌๅŒ–ๆˆASCII๏ผŒไธŽ&7, ๅŽไธ‰ไฝๆ˜ฏunique็š„๏ผŒi>9ๅŽๅš t << 3 & 0x3FFFFFFF
202. Happy Number O(k) O(k) Easy ่ฆไนˆๆ˜ฏhappy number๏ผŒ่ฆไนˆ่ฝฌๅŒ–่ฟ‡็จ‹้™ทๅ…ฅๅพช็Žฏ
204. Count Primes O(n) O(n) Easy countไปŽๅฐๅพ€ๅคงๅŽeliminate๏ผŒๆณจๆ„่ฆๅฐฝๅฏ่ƒฝefficient
205. Isomorphic Strings O(n) O(1) Easy ๅฏไปฅ่ฎฐๅฝ•็›ธๅŒไฝ็ฝฎๅญ—ๆฏๅ‡บ็Žฐ็š„ไธŠไธ€ไฝ๏ผŒๆˆ–่€…ๆŠŠs,tๅญ—ๆฏ็›ธไบ’ๅ…ณ่”่ตทๆฅ, python ๅฏไปฅ็”จfind+map or zip+set
217. Contains Duplicate O(n) O(n) Easy easy one, ๅฏไปฅ็”จsort + unique
219. Contains Duplicate II O(n) O(n) Easy easy one
290. Word Pattern O(n) O(n) Easy ๆ€่ทฏๅ’Œ205. Isomorphic Strings ไธ€ๆ ท
299. Bulls and Cows O(n) O(1) Easy One pass: ๅฆ‚ๆžœguess[i] ๅ’Œ secret[i]ไธ€ๆ ท, bull++, ไธไธ€ๆ ท๏ผŒ++m[sec[i]], --m[guess[i]] python ๅฏไปฅ็”จไธคไธชcollectons.Counter็›ธๅ‡, ๅพ—ๅˆฐ้‡ๅˆ็š„set
336. Palindrome Pairs O(n * k^2) O(n*k) Hard ๐Ÿ”trie
387. First Unique Character in a String O(n) O(n) Easy ้œ€่ฆ two pass
388. Longest Absolute File Path O(n) O(d) Medium map่ฎฐๅฝ•ๆฏไธ€ๅฑ‚็Žฐๆœ‰็š„้•ฟๅบฆ,ๅˆฐๆ–ฐ็š„ๆˆ–่€…ๅŽŸๆฅไธ€ๅฑ‚๏ผŒๆ›ดๆ–ฐmap, resๆ˜ฏmax(mapไธญๅซๆœ‰โ€œ.โ€็š„ไธ€ๅฑ‚), ็”จๅˆฐstring::find, string::find_first_not_of, std::find
409. Longest Palindrome O(n) O(1) Easy ๅฏไปฅ็”จstd::count, ๆˆ–่€…ๅฏไปฅๆฅๅ›žflip map, ๅฝ“mapไฝtrue +2
424. Longest Repeating Character Replacement O(n) O(1) Medium ๐Ÿ”sliding window: ่ฎฐๅฝ•window็š„ๅˆๅง‹็‚น, ๅฆ‚ๆžœๅฝ“ๅ‰้•ฟๅบฆ - ๆœ€ๅคงcount > k, ++start(ไฟๆŒwindows็š„ๆœ€ๅคง้•ฟๅบฆ), ๅฆ‚ๆžœๆปก่ถณ๏ผŒstartไธๅ˜๏ผŒ็ป“ๆžœๆ˜ฏs.size()-start
438. Find All Anagrams in a String O(n) O(1) Easy sliding window: ่ทŸ567. Permutation in Stringๆ€่ทฏไธ€ๆ ท
  • ไฟๆŒwindow็š„้•ฟๅบฆไธๅ˜, ็”จl็ฎ—pไธญ่ฟ˜ๅ‰ฉๅ‡ ไธช็‚นๆฒกๆœ‰่ขซๆ•ฐ่ฟ‡
  • ็”จrightๅ’Œleft, ๅฝ“rightๅ’Œleftไน‹้—ด้•ฟๅบฆ == p็š„้•ฟๅบฆ,append to result
  • ็”จไธคไธชmap ๅˆ†ๅˆซ่ฎฐๅฝ•s ๅ’Œp๏ผŒๅฆ‚ๆžœs==p,append to result
447. Number of Boomerangs O(n^2) O(n) Easy ๅฏไปฅ็”จhypot
454. 4Sum II O(n^2) O(n) Medium ๅฏไปฅๆŠŠ4sum็œ‹ๆˆtwo sum, ๆŠŠA+B็š„ๅ’Œ็ป‘ๅฎš๏ผŒๆŠŠC+D็š„ๅ’Œ็ป‘ๅฎš๏ผŒ็œ‹-C-Dๆ˜ฏไธๆ˜ฏๅœจA+B็š„map้‡Œ
473. Matchsticks to Square O(n * s * 2^n) O(n * (2^n + s)) Medium DFS or Bit Mask
523. Continuous Subarray Sum O(n) O(k) Medium ๐Ÿ”ๆฑ‚ๅผ€ๅง‹ๆ•ฐๅˆฐๆ‰€ๆœ‰i็š„ๅ’Œ็š„ไฝ™ๆ•ฐ๏ผŒๅฆ‚ๆžœ็Žฐๅœจ่ฟ™ไธช็š„ไฝ™ๆ•ฐไน‹ๅ‰้‡ๅˆฐ่ฟ‡๏ผŒ่กจ็คบ๏ผŒไธคไธชๆ•ฐไน‹้—ดๆœ‰ๆ•ฐ็š„ๅ’Œๆญฃๅฅฝๆ•ด้™คk
532. K-diff Pairs in an Array O(n) O(n) Easy ๐Ÿ”one pass่งฃ: ไธคไธชhashset, lookup ๅ’Œres, ๆ‰พ็š„ๆ—ถๅ€™ๆ—ขๅ‘ไธŠๆ•ฐๅˆๅ‘ไธ‹ๆ•ฐ, ไธบไบ†้ฟๅ…้‡ๅค, set(res)ๅชpushไธ‹้™,็ป“ๆžœๅฐฑๆ˜ฏres size
554. Brick Wall O(n) O(m) Meidum ็›ธๅฝ“ไบŽๆฑ‚ๆœ€ๅคš็ป่ฟ‡็ –ๅคด็ผ็ผ
560. Subarray Sum Equals K O(n) O(k) Medium ๐Ÿ”็”จhashmap่ฎฐๅฝ•ๆฏ็‚น็š„rolling sum(0,i)๏ผŒ ้‚ฃไนˆๅช้œ€่ฆๆ‰พ(0,i)็š„sum - kๅœจไธๅœจmapไธญ๏ผŒๅœจ็š„่ฏ ่กจ็คบๅญ˜ๅœจไธ€็‚น[0,j] + k = (0,i)็š„sum๏ผŒ res += map[sum-k] (ๅฏ่ƒฝไธ€ไธชsumๅ‡บ็Žฐๅพˆๅคš้)
561. Array Partition I O(n) O(n) Easy Sort or Bucket Sort
575. Distribute Candies O(n) O(n) Easy ๅฏนๆฏ”set็š„้•ฟๅบฆๅ’Œcandies.size()/2็š„้•ฟๅบฆ, C++ๅฏไปฅ็”จbitset
594. Longest Harmonious Subsequence O(n) O(n) Easy
599. Minimum Index Sum of Two Lists O((m + n) * l) O(m * l) Easy
609. Find Duplicate File in System O(n * k) O(n * k) Medium
721. Accounts Merge O(nlogn) O(n) Medium ๐Ÿ” Union Find, ไธ่ƒฝ็”จ็ฎ€ๅ•็š„hash table ๆ‰พparent, ๆฏ”ๅฆ‚ (1@com, 2@com), (3@com, 4@com), (4@com, 2@com), ไธ็”จUnion findๅˆ†ๆˆไธค็ป„
748. Shortest Completing Word O(n) O(1) Medium
771. Jewels and Stones O(n+m) O(n) Easy
811. Subdomain Visit Count O(n) O(n) Easy
822. Card Flipping Game O(n) O(n) Medium ๅ…ˆๆŠŠfront[i]ๅ’Œend[i] ไธ€ๆ ท็š„ๆ’ๅ…ฅๅˆฐhash set, ๅ†loop front & end, ้€‰ๅ–ไธๅœจhash setไธญๆœ€ๅฐ็š„
825. Friends Of Appropriate Ages O(n+k^2) O(k) Medium ็”จhash mapๅญ˜ageๅ’Œcount, loopไธคๅฑ‚hashmap, ๅˆคๆ–ญๅ†…ๅฑ‚ๅ’Œๅค–ๅฑ‚keyๆ˜ฏๅฆๆปก่ถณๆกไปถ, ๆปก่ถณ็š„่ฏๆ›ดๆ–ฐ็ป“ๆžœ
1418 Display Table of Food Orders in a Restaurant O(n + tlogt + flogf) O(n) Medium โœ๏ธC++ transform
ย ย ย ย ย ย ย  ย ย ย  ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย  ย ย ย  ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย  ย ย ย ย ย ย ย  ย ย ย  ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย  ย ย ย  ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย  ย ย ย ย ย ย ย  ย ย ย  ย ย ย  ย ย ย  ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย 

sliding windows Summary

summary
sliding windows: windows้ƒฝๆ˜ฏ็œ‹ไปฅๅฝ“ๅ‰ๅญ—ๆฏ็ป“ๅฐพ็š„window. ๆฏ”่พƒๅฏน่ฑกs1, ่ขซๆฏ”่พƒๅฏน่ฑกs2
  • ๅฏไปฅ่ฎฐๅฝ•ๅฝ“ๅ‰substring็š„ๅผ€ๅง‹ไฝ็ฝฎ๏ผŒ
  • ็”จๆ•ฐๅญ—่ฎฐๅฝ•substring็š„้•ฟๅบฆ
  • ็”จhashsetๅ’Œไธคไธชpointer่ฎฐๅฝ•ๅฝ“ๅ‰windows็š„้•ฟๅบฆ
  • map+pointer 1 map + 2 pointers: mapๅ…ˆ่ฎฐๅฝ•ๆฏ”่พƒๅฏน่ฑก map[s1[i]]++, ๅ†ๅฏน่ขซๆฏ”่พƒๅฏน่ฑก ๆ‰€ๆœ‰ๅญ—ๆฏ / keyๅ‡บ็Žฐ , map[s2[i]]--
    • ๅ›บๅฎšwindows ้•ฟๅบฆ
      • ไธ€ไธชpointer count(ๅˆๅง‹ๅ€ผไธบ count=len), ๅฎƒ็š„ๅ€ผไผšๅ˜ๅŠจ, ่กจ็คบๅ›บๅฎšwindows ๅ†…ๅคšๅฐ‘ไธชๆปก่ถณๆกไปถ
      • ไธ€ไธชpointer len(ไธๅ˜ๅŒ–)่กจ็คบs1้•ฟๅบฆ,็”จๆฅ็งปๅŠจ็ช—ๅฃ,
      • ๆฏ”่พƒๆกไปถ: if --map[s2[i]] >= 0 , --count, ๅฝ“count == 0 i-len + 1 ๆ˜ฏwindows่ตท็‚น
      • ็งปๅŠจ็ช—ๅฃๆกไปถ๏ผšif i>=len-1, map[s2[i-len+1]]++
    • ไธๅ›บๅฎš้•ฟๅบฆ.
      • ไธ€ไธชpointerleft(ๅ˜ๅŒ–) , ่ฎฐๅฝ•ๅทฆไพงwindows ่ตทๅง‹็‚น
      • ไธ€ไธชpointer len ่ฎฐๅฝ•s1้•ฟๅบฆ(ไธๅ˜ๅŒ–)
      • ๆฏ”่พƒๆกไปถ: if i - left == len - 1 , left่กจ็คบwindows ่ตท็‚น
      • ็งปๅŠจ็ช—ๅฃๆกไปถ: if(map[s2[i]])<0 ่กจ็คบ็Žฐwindowsไธญ s2[i] ไธชๆ•ฐ ๅคงไบŽ s1ไธญไธชๆ•ฐ, or s1ไธญๆฒกๆœ‰ s2[i], ไธ‹้ขไธค็ง็งปๅŠจๆ–นๅผ้ƒฝๅฏไปฅ
        • ๆ–นๅผไธ€: while(left <= i && map[s2[i]]< 0) map[s2[left++]]++ใ€‚e.g.1 s1=abc, s2=ababc, ๅœจindex=2, ็ฌฌไบŒไธชa, ๆœ‰ไธคไธชa ๅคšไบŽs1ไธญไธชๆ•ฐ, e.g. 2 s1=abc, s2=abdabc, ๅœจindex=2, dๅœจs1ไธญๆฒกๆœ‰ๅ‡บ็Žฐ )
        • ๆ–นๅผไบŒ: while(map[s2[start++]-'a']++ >= 0); ๆŠŠไน‹ๅ‰ๆ‰€ๆœ‰ๆปก่ถณ็š„้ƒฝ็งป่ตฐ,
    • ๅฏไปฅ็”จไธคไธชmap,ไธ€ไธชmap่ฎฐๅฝ•ๆฏ”่พƒๅฏน่ฑก(T)๏ผŒไธ€ไธช่ฎฐๅฝ•่ขซๆฏ”่พƒๅฏน่ฑก(S), ่ฟ˜้œ€่ฆไธ€ไธชcount่ฎฐๅฝ•SไธญTๅ‡บ็Žฐ็š„ไธชๆ•ฐ, start่ฎฐๅฝ•windows่ตทๅง‹็‚น, ๅˆๅง‹ๅŒ–count = len(T);
      ๅชๆœ‰ๅฝ“sdict[s[i]] < tdict[s[i]], count--; ๅฝ“count == 0, ๆปก่ถณๆƒ…ๅ†ต,append to res;
      ็งปๅŠจ็ช—ๅฃ่ฟ‡็จ‹ไธญ,dict[s[start]]--, start++,ๅชๆœ‰ๅฝ“sdict[s[start]] < tdict[s[start]]ๆ—ถ ++count,
      ๆฏ”ๅฆ‚30้ข˜ Substring with Concatenation of All Words, 76้ข˜ Minimum Window Substring
      ไธคไธช้ข˜ๅŒบๅˆซๆ˜ฏ30ไธ่ƒฝๅŒ…ๆ‹ฌๅคšไฝ™็š„string (ไธๅฏไปฅsdict[s[start]] > tdict[s[start]]), 76ๆ˜ฏๅ…่ฎธ็š„
// 438. Find All Anagrams in a String
//s2: "cbaebabacd"  s1: "abc"
//Output: 0, 6]

//ๅ›บๅฎšwindows้•ฟๅบฆ
class Solution {
public:
    vector<int> findAnagrams(string s2, string s1) {
        vector<int>map(26,0);
        for(auto i: s1)
            map[i-'a']++;
        int len = s1.size(), count = s1.size();
        vector<int>res;
        for(int i = 0; i<s2.size();i++){
            if(map[s2[i]-'a']-->0) count--;
            if(count == 0) res.push_back(i-len+1);
            if(i>=len-1){
                if(++map[s2[i-len+1]-'a'] > 0) count++;
            }
        }
        return res;
    }
};

//ไธๅ›บๅฎšwindows้•ฟๅบฆ, ๆ–นๆณ•ไธ€:

class Solution {
public:
    vector<int> findAnagrams(string s2, string s1) {
        vector<int>map(26,0);
        for(auto i: s1)
            map[i-'a']++;
        int len = s1.size(), left = 0;
        vector<int>res;
        for(int i = 0; i<s2.size();i++){
            map[s2[i]-'a']--;
            if(map[s2[i] - 'a'] <0)
                while(left<= i && map[s2[i]-'a'] < 0) map[s2[left++]-'a']++;
                /* or

                //correct
                while( mp[s2[left]]++ >= 0 )
                    ++left;
                ++left;

                //wrong: ๆฏ”ๅฆ‚ ab: eabc,  left  ไผšไธ€็›ดๅœๅœจ0(e)
                while( mp[s2[left]] >= 0 )
                    mp[s2[left++]]++

                */

            if(i-left+1 == len){
                res.push_back(left);
            }
        }
        return res;
    }
};

//ไธๅ›บๅฎšwindows้•ฟๅบฆ ๆ–นๆณ•ไบŒ:

class Solution {
public:
    vector<int> findAnagrams(string s2, string s1) {
        vector<int>map(26,0);
        for(auto i: s1)
            map[i-'a']++;
        int len = s1.size(), left = 0;
        vector<int>res;
        for(int i = 0; i<s2.size();i++){
            map[s2[i]-'a']--;
            if(map[s2[i] - 'a'] <0)
                while(map[s2[left++]-'a']++ >= 0);
            //cout<<i <<" left "<<left<<endl;
            if(i-left+1 == len){
                res.push_back(left);
            }
        }
        return res;
    }
};
/*
"cbaebabacd"
"abc"
DEBUG stdout
0 left 0
1 left 0
2 left 0
3 left 4
4 left 4
5 left 4
6 left 5
7 left 6
8 left 6
9 left 10
*/
Title Time Space Difficulty Algorithm Note
567. Permutation in String O(n) O(1) Medium ๐Ÿ˜sliding Window(้•ฟๅบฆไธบlen(s1)), ๆฏๆฌก็งปๅŠจๆก†,vectorๅ‡ๅŽปๆ–ฐๆฅ็š„๏ผŒๅŠ ไธŠๅˆšๅˆšpass็š„๏ผŒ็›ดๅˆฐl้•ฟๅบฆไธบ0
ย ย ย ย ย ย ย  ย ย ย  ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย 

Stack

Title Time Space Difficulty Algorithm Note
020. Valid Parentheses O(n) O(n) Easy โŒๆณจๆ„return true if stack is empty
032. Longest Valid Parentheses O(1) O(n) Hard ๐Ÿ˜
  • DP: dp[i] ไปฃ่กจไปฅcurrent index็ป“ๆŸ็š„ๆœ€ๅคงvalid substring็š„้•ฟ
  • Stack: push็š„ๆ˜ฏๆœ€่ฟ‘'('็š„index ๅ’Œsubstring็š„่ตท็‚น ๅ…ณ้”ฎ็‚นๆ˜ฏๅ…ˆpop ๅ†ๆฏ”่พƒ
071. Simplify Path O(n) O(n) Medium โœ๏ธ getlineๅฏไปฅๅฝ“ๅšstack, ้‡ๅˆฐ".." stack pop; vectorๅฏไปฅ็”จไฝœstack
084. Largest Rectangle in Histogram O(n) O(n) Hard ๐Ÿ˜
  • stack: ascending stack, ้šพ็‚น: ๆ‰พๅˆฐleft start
  • Divide Conquer:ๆœ€ๅฐ็š„areaๆฅ่‡ชๅทฆ้ข๏ผŒๆˆ–่€…ๆฅ่‡ชๅณ้ข๏ผŒๆˆ–่€…ๆฅ่‡ชarea contain middle point
085. Maximal Rectangle O(n*m) O(m) Hard ๐Ÿ”
  • stack:ไธŽ084. ็ฑปไผผ, matrixๆœ‰n่กŒ๏ผŒ้—ฎ้ข˜ๅฏไปฅ่ฝฌๆขๆˆnไธชHistogram็š„้—ฎ้ข˜
  • ๐Ÿ˜๐Ÿ˜__DP__ : heightไปฃ่กจไปŽไธŠๅˆฐไธ‹๏ผŒๆœ‰ๅ‡ ไธช่ฟž็ปญ็š„1, left: ็Žฐๅœจ่ฟ™ไธชheight๏ผŒๅทฆไพง่พน็•Œไฝ็ฝฎ, right:่ฟ™ไธชheight,้•ฟๆ–นๅฝข็š„ๅณไพง่พน็•Œ๏ผˆๅณไพง่พน็•ŒไธๅŒ…ๆ‹ฌๅœจ้•ฟๆ–นๅฝขๅ†…๏ผŒๆ˜ฏ้•ฟๆ–นๅฝขๅณๅค–ไพง็ฌฌไธ€ไธช็‚น๏ผ‰
101. Symmetric Tree O(n) O(h) Easy โŒ ๆณจ: iterative stack push ้กบๅบ
150. Evaluate Reverse Polish Notation O(n) O(n) Medium โœ๏ธ Python Lambda Function in dictionary ๐Ÿ” C++ recursive solution
155. Min Stack O(n) O(1) Easy ๐Ÿ˜š Descending Stack: ไธคไธชstack,ไธ€ไธช็”จๆฅๆ”พๆญฃๅธธ็š„้กบๅบ๏ผŒๅฆไธ€ไธชไฝœไธบmin
173. Binary Search Tree Iterator O(1) O(h) Medium 307. Range Sum Query - Mutable ้€ป่พ‘็ฑปไผผ, ไธ่ฆๅ…ˆๅ…จ้ƒจ่ตฐๅฎŒ
232. Implement Queue using Stacks O(1), amortized O(n) Easy ๐Ÿ”ไธคไธชstack in & out, in็”จๆฅpush, top: ๅ‡ๅฆ‚outไธบ็ฉบ๏ผŒdump in to out
224. Basic Calculator O(n) O(n) Hard โŒ็”จsign=1่ฎฐๅฝ•+, -1่ฎฐๅฝ•ๅ‡, ็ขฐๅˆฐnumไน˜ไปฅres,'('res,sign push่ฟ›stack, ')'ๅ…ˆไน˜ไปฅstack็š„top(ๆ˜ฏsign),ๅ†ๅŠ ไธŠstack็š„top(signไน‹ๅ‰็š„res)
227. Basic Calculator II O(n) O(n) Medium โŒ ็”จsign=1่ฎฐๅฝ•+, -1่ฎฐๅฝ•ๅ‡, sign = 2 ่ฎฐๅฝ•*๏ผŒ 3่ฎฐๅฝ•้™ค, ไธŠไธ€ไธชsignๆ˜ฏไน˜ๆˆ–้™ค๏ผŒๅ…ˆ่ฟ›่กŒoperation
331. Verify Preorder Serialization of a Binary Tree O(n) O(n) Medium ๐Ÿ˜๐Ÿ˜โœ๏ธstringstream + getline
  • Stack: ๆฏไธชnode outdegree = 2๏ผŒin-degree = 1
  • indegree(ๅˆฐparent็š„) = outdegree๏ผˆๅˆฐchild็š„๏ผ‰ not NULL node has outdegree
341. Flatten Nested List Iterator O(n) O(h) Medium ๐Ÿ˜๐Ÿ˜stack + recursionไปŽๆœ€ๅŽๅพ€ๅ‰loop, queueไปŽๅ‰ๅพ€ๅŽloop, โœ๏ธโœ๏ธC++/Python Iterator, ่ฆๅญ˜iterator, ไธ่ƒฝๅญ˜vector, ๅ› ไธบๅญ˜vector memoryไผšๅพˆๅคง
385. Mini Parser O(n) O(h) Medium ้‡ๅˆฐ',' ']' ๆŠŠไน‹ๅ‰็š„integer add๏ผŒ ๆฏ”ๅฆ‚[-1], [123,456], ้‡ๅˆฐ']',ๆŠŠ็Žฐๅœจ่ฟ™ไธชnested listๅŠ ๅ…ฅไธŠไธชnested list
394. Decode String O(n) O(h) Medium ๐Ÿ”ๅฏไปฅ็œ‹็œ‹recursive ็š„่งฃ, ็จ‹ๅบ่ฎพ่ฎก: ๆ€Žไนˆ่ฎพ่ฎกไธ€ไธชๅฅฝ็š„stack, ็ฑปไผผ726. Number of Atoms
  • ้‡ๅˆฐnum, push num ่ฟ›num stack
  • ้‡ๅˆฐ'[',push โ€œโ€่ฟ›pat stack
456. 132 Pattern O(n) O(h) Medium ๐ŸŽ…๐ŸŽ… ๅฏปๆ‰พ s1 < s3 < s2๏ผŒไปŽๅŽๅ‘ๅ‰๏ผŒDescending stack, ้šพ็‚น: ็†่งฃstack่ฎฉs2 ้€ๆธๅ˜ๅคง, ไฝ†s3ๅฏๅขžไนŸๅฏๅ‡, ๅ› ไธบs2ๅ‡ๅฐๅ‰ๅฐฑreturn trueไบ†
636. Exclusive Time of Functions O(n) O(n) Medium ๐Ÿ”stack ๅญ˜็š„ๆ˜ฏไธŠไธชjob็š„id
682. Baseball Game O(n) O(n) Easy โŒbad problem description
726. Number of Atoms O(n^2) O(n) Hard ็ฑปไผผ 394. Decode String
735. Asteroid Collision O(n) O(n) Medium ๐ŸŽ… ็ขฐๆ’žๅ‘็”Ÿๅช่ƒฝๆ˜ฏๆ–ฐๆฅ็š„ๅฐไบŽ0๏ผŒstack top > 0
736. Parse Lisp Expression O(n) O(n) Hard โŒstack้œ€่ฆไธคไธช๏ผŒไธ€ไธชๆ˜ฏๅญ˜string dict(็”จๆฅๅ‚จๅญ˜let็š„ๅญ—ๅ…ธ), ไธ€ไธชๅญ˜string vector(็”จๆฅๅ‚จๅญ˜ไธŠไธชstring็š„split), ้‡ๅˆฐ'(', ๅฆ‚ๆžœไน‹ๅ‰ๆ˜ฏlet, ๅ…ˆๅญ˜map, ็„ถๅŽpush่ฟ›ไธคไธชstack, string vectorๆธ…็ฉบ๏ผŒๅญ—ๅ…ธไธๆธ…็ฉบ ใ€‚ ้‡ๅˆฐ')', ็ฎ—ๅฝ“ๅ‰็š„, ๆŠŠ็ป“ๆžœpushๅˆฐไธŠไธชstring(stkstring.top()) ็š„็ป“ๅฐพ, popไธคไธชstack
739. Daily Temperatures O(n) O(n) Medium ๐Ÿ” Ascending/Descending stack, ๅฏไปฅๆญฃๅ‘ไนŸๅฏไปฅๅๅ‘
0901. Online Stock Span O(n) O(n) Medium
ย ย ย ย ย ย ย  ย ย ย  ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย  Ascending & Descending Stack ๆŒ‰็…ง container็š„้กบๅบ่ฟ›่กŒๆŽ’ๅบ

Linked List

Title Time Space Difficulty Algorithm Note
002. Add Two Numbers O(n) O(1) Medium
021. Merge Two Sorted Lists O(n) O(1) Easy
023. Merge k Sorted Lists O(nklogk) O(1) Hard Heap, Divide Conquer, ๆณจ: ไธ่ƒฝ็”จไธ€็›ด็”จ0ไฝœไธบl ๅ’Œrๆฏ”๏ผŒ่ฟ™ๆ ท็š„่ฏ๏ผŒl็š„sizeไผšๅขžๅŠ ็š„ๅพˆๅฟซ๏ผŒๅˆฐๆœ€ๅŽl sizeๅฟซๆˆไฝnkไบ†
024. Swap Nodes in Pairs O(n) O(1) Easy ๅปบdummy, ๆๅ–ๅพ€ๅŽ็ฌฌไบŒไธชไธบnextnext๏ผŒๆ–ญ็ฌฌไบŒ๏ผŒไธ‰้“พ, nextnextๅŽๆŽฅไธŠๅฝ“ๅ‰็š„next, ๆŠŠnextnextๆŽฅๅˆฐๅฝ“ๅ‰็š„next, ptๅพ€ๅŽ่ตฐไธคๆญฅ
025. Reverse Nodes in k-Group O(n) O(1) Hard ็ฑปไผผ206 Reverse Linked List
061. Rotate List O(n) O(1) Medium
082. Remove Duplicates from Sorted List II O(n) O(1) Medium
083. Remove Duplicates from Sorted List O(n) O(1) Easy ไธ่ƒฝ็”จrecusion, recursion็š„่ฏไผš็”จpass nๅ›žlinked list๏ผŒ็”จO(n)space, iterative่งฃspaceๅช็”จO(1),treeๅฏไปฅ็”จrecursionๅŽŸๅ› ๆ˜ฏๅฎƒ็š„stack spaceๆ˜ฏO(logn)
138. Copy List with Random Pointer O(n) O(1) Medium 1. ๅ…ˆๆŠŠๆฏไธชnodeๅคๅˆถไธ€ไธช๏ผŒๆŠŠๅคๅˆถ็š„่ดดๅœจ่ขซๅคๅˆถ็š„ๅŽ้ข
2. loop node(็Žฐๅœจ้•ฟๅบฆๆ˜ฏ2n), ๆŠŠcur->next->random = cur->random->next๏ผŒๅ› ไธบcur->random->nextๆ˜ฏๅคๅˆถcur->random่ฟ‡ๆฅ็š„
3. ๆœ€ๅŽ็ป“ๆžœๅฐฑๆ˜ฏๆŠŠๆฏไธชๅถๆ•ฐไฝ็š„node่ฟžๆŽฅ่ตทๆฅ๏ผŒๅŒๆ—ถ่ฆๆถˆ้™คๅถๆ•ฐ็š„node(้•ฟๅบฆ็”ฑ2nๅ˜ๅ›žn)๏ผŒๅฆๅˆ™็ป“ๆžœๆ˜ฏไฟฎๆ”นไบ†ๅŽŸๆฅ็š„node
147. Insertion Sort List O(n^2) O(1) Medium Sort
148. Sort List O(nlogn) O(logn) Medium Sort
  • top-down,็”จไธคไธชpointer๏ผŒไธ€ไธชๆ…ข๏ผŒไธ€ไธชๅฟซ๏ผŒๅŽปsplit,็„ถๅŽmerge, space: O(logn)
  • bottom-up, ็ฌฌไธ€ๆฌกๅชๆŠŠ1ๅ’Œ2้กบๅบ๏ผŒ3ๅ’Œ4้กบๅบ๏ผŒ5ๅ’Œ6้กบๅบ่ฐƒๆ•ด๏ผŒ็ฌฌไบŒๆฌกๆŠŠ1๏ผŒ2ๅ’Œ3๏ผŒ4้กบๅบ่ฐƒๆ•ด๏ผŒ5,6ๅ’Œ7๏ผŒ8้กบๅบ่ฐƒๆ•ด๏ผŒไปฅๆญค็ฑปๆŽจ, space: O(1)
160. Intersection of Two Linked Lists O(n+m) O(1) Easy ๅˆฉ็”จ็š„ๆ˜ฏ lA + lB_1 = lA_1 + lB (lenA + Bไบค็‚นๅ‰็š„้•ฟๅบฆ = lenB + Aไบค็‚นๅ‰็š„้•ฟๅบฆ),
pA๏ผŒpB ๆฏๆฌก้ƒฝๅ‰่ฟ›ไธ€ๆญฅ๏ผŒpAๅˆฐend,pA่ฎพไธบBhead, pBๅˆฐend,pB่ฎพไธบAend,
่ฟ™็งๅฐพๅฏนๅคดๅชๆขไธ€ๆฌก๏ผŒ็ฌฌไบŒๆฌกpA ๆˆ–่€…pBๅˆฐend ่ฟ”ๅ›žNULL(ๅฐฑๆ˜ฏๆฒกๆœ‰ไบค็‚น)
203. Remove Linked List Elements O(n) O(1) Easy
206. Reverse Linked List O(n) O(1) Easy
234. Palindrome Linked List O(n) O(1) Easy revese listๅ‰้ข้ƒจๅˆ†๏ผŒ็„ถๅŽreverseไน‹ๅŽ๏ผŒ้€ไธชๅฏนๆฏ”ๅ‰ๅŠ้ƒจๅˆ†ๆ˜ฏๅฆ็ญ‰ไบŽๅŽๅŠ้ƒจๅˆ†็š„ๅ€ผ
237. Delete Node in a Linked List O(n) O(1) Easy ๆŠŠnode->next็š„valๆๅˆฐnode val็„ถๅŽdelete node->next
328. Odd Even Linked List O(n) O(1) Medium
  • ๆŠŠeven = head->next, odd = head, ็„ถๅŽ้€ไธชๅ…ˆๆ–ญoddๅ’Œไธ‹ไธชeven้“พ ๅ’Œ evenๅ’Œไธ‹ไธชodd้“พ(้กบๅบไธ่ƒฝๅ)
  • ๆŠŠeven้กบๅบไฟ็•™๏ผŒๆŠŠoddๆๅ‡บๆฅ๏ผŒ ๆ–ญevenๅ’Œodd็š„้“พ๏ผŒ็„ถๅŽevenhead ๆŽฅๅœจodd->nextไธŠ
445. Add Two Numbers II O(n+m) O(m+n) Medium ็”จไธคไธชstack,ๆŠŠๆฏไธชlistๅ€ผpush ่ฟ›stack๏ผŒๆœ€ๅŽpush่ฟ›็š„ๅ…ˆ็ฎ—
725. Split Linked List in Parts O(n) O(1) Medium ๆฏๆฌกๅ‰่ฟ›ๅˆฐๆญคๆฌกpush่ฟ›vector็š„ๆœ€ๅŽไธ€ไฝ, ็„ถๅŽๆ–ญ้“พ, ็ฌฌiไธชvector้•ฟๅบฆไธบ n//k + (i< n%k)
817. Linked List Components O(n+m) O(m) Medium ๆŠŠvector่ฝฌๅŒ–ๆˆunordered_set, ็„ถๅŽๅˆคๆ–ญๆฏไธชval,ๆ˜ฏไธๆ˜ฏๅœจunordered_set้‡Œ้ข
LinkedList ๅฝ“head, cur ๆŒ‡ๅ‘ๅŒไธ€็‚น, cur = cur->next; head ไธไผšๆ”นๅ˜, ไฝ†ๆ˜ฏๅฝ“curๅœจheadไน‹ๅŽ๏ผŒheadๅŒ…ๅซcur, cur = cur->next, headไผš่ทณ่ฟ‡cur่ฟ™็‚น
two pointer 1.whiLe(fast->next && fast->Next->next) ๆ˜ฏๆ‰พไธญ็‚น, ๆฏ”ๅฆ‚1-2-3-4-5-6๏ผŒslowๆœ€ๅŽ็ญ‰ไบŽ3
2.whiLe(fast && fast->Next) ๆ˜ฏๆ‰พไธญๅŽไธ€็‚น,ๆฏ”ๅฆ‚1-2-3-4-5-6๏ผŒslowๆœ€ๅŽ็ญ‰ไบŽ4, 1-2-3-4-5 ๆœ€ๅŽๆ˜ฏ3

Queue

Title Time Space Difficulty Algorithm Note
239. Sliding Window Maximum O(n) O(k) Hard ๐Ÿ˜ Monoqueue using Deque
  • Solution 1 deque int : ๅชๅญ˜ๅ•ไธชindex, descending queue
  • Solution 2 deque pair, firstๆ˜ฏๅญ˜ๅฝ“ๅ‰็š„ๆ•ฐ, second่กจ็คบwindowๅผ€ๅง‹ไฝ็ฝฎๅˆฐ่ฟ™ไธชๆ•ฐไน‹ๅ‰๏ผŒๅคšๅฐ‘ไธชๆฏ”็Žฐๅœจ่ฟ™ไธชๆ•ฐๅฐ
    pop: ็œ‹top second-- = 0, pop_front()

Heap

Title Time Space Difficulty Algorithm Note
  • C++ priority_queue defaultๆ˜ฏmax heap
  • Python็š„heapq defaultๆ˜ฏmin heap.
  • priority_queue<int, vector<int>, less<int>> ๆ˜ฏmax_heap, greater<int`>ๆ˜ฏmin_heap
  • multiset<int, greater<int>> ๆ˜ฏmax_heap
  • multisetๅ’Œpriority_queue็”จ็š„default comparator็›ธๅ
264. Ugly Number II O(n) O(1) Medium ๐Ÿ˜๐ŸŽ…๐ŸŽ…
  • dp: loop n ่€Œไธๆ˜ฏ loop 1 ๅˆฐ n-th ugly number
  • heap ็š„่งฃ๏ผš:alien: ้ฟๅ…heapไธญๅ‡บ็Žฐ้‡ๅคๆ•ฐ
295. Find Median from Data Stream O(nlogn) O(1) Medium ่™ฝๆ˜ฏhard, ้€ป่พ‘็ฎ€ๅ•, ไธคไธชheap, minheap, maxheap,
โœ๏ธๅฏไปฅ็œ‹็œ‹python heapq็”จๆณ• heappushpop
313. Super Ugly Number O(n*k) O(n+k) Medium ็ฑปไผผ 264. Ugly Number II
373. Find K Pairs with Smallest Sums O(k * log(min(n, m, k))) O(min(n, m, k)) Medium ๐Ÿ”ๆณจ: ไธ็”จhashset, ๅฏไธ้‡ๅคpush ่ฟ›heap
๐ŸŽ…ไธ่ƒฝ็”จtwo pointer, ๆฏ”ๅฆ‚[1,7], [2,6], ็ป“ๆžœๆ˜ฏ[1,2],[1,6],[2,7], two pointer็ป™็š„ๆ˜ฏ[1,2],[1,6],[6,7]
โœ๏ธ: python itertools.product, itertools.islice
O(k) solution
378. Kth Smallest Element in a Sorted Matrix O(k * log(min(n, m, k))) O(min(n, m, k)) Medium Binary Search, Heap, ZigZag Search
407. Trapping Rain Water II O(m * n * (logm + logn)) O(m*n) Hard ๐Ÿ˜๐ŸŽ…
  • ้šพ็‚น: ็‚นholdๆฐด็š„้ซ˜ๅบฆ ๅ–ๅ†ณไบŽ min(ๅ‘จๅ›ดๅ››ไธชๆ–นๅ‘ไธŠๆœ€ๅคง้ซ˜ๅบฆ), ่€Œไธๆ˜ฏmin(ๅ››ไธช้‚ปๅฑ…็š„้ซ˜ๅบฆ), ๅ†push่ฟ›queue(push็š„heightๆ˜ฏๅฝ“ๅ‰heightๅ’Œcell็š„ๆœ€ๅคงๅ€ผ)
  • ๅ…ˆๆŠŠ้•ฟๆ–นๅฝขๅ››ๆก่พน push่ฟ›min heap; ่ฆheap top้ซ˜ๅบฆๆ˜ฏ้€’ๅขž็š„๏ผ้€”ๅพ„: BFS push ๆ—ถๅ€™push max(heap top ้ซ˜ๅบฆ, heights[i][j])
  • visualization
632. Smallest Range Covering Elements from K Lists O(nklogk) O(k) Hard ๐Ÿ˜๐ŸŽ…
  • ้šพ็‚น: ็ผฉๅฐwindows, windows้œ€่ฆๅŒ…ๅซๆฏไธชlistๅ†…ไธ€ไธชๆ•ฐ
  • ็”จheap, heapไธญๅŒ…ๅซๆฏไธชlistไธญๅฝ“ๅ‰ๆœ€ๅฐๆ•ฐ
  • ไธ่ƒฝ็”จtwo pointer, two pointer: ๆฏไธชlistๆฏไธชๆ•ฐ ๅŒ…ๅซๅœจwindwosๅ†…, ๆญค้ข˜ๆ˜ฏ ๆฏไธชlist่‡ณๅฐ‘ไธ€ไธชๆ•ฐ ๅซๅœจwindwosๅ†…
  • vector[i][0]็š„ๆ•ฐpush่ฟ›minheap, ไธ€ไธชint ่ฎฐๅฝ•ๆœ€ๅคงๅ€ผ, heap top ๅฝ“ๅ‰ๆœ€ๅฐๅ€ผ
846. Hand of Straights O(nlogn) O(n) Medium ๐Ÿ”
  • Solution 1: set, set.begin ไธบๆฏไธชgroup ็š„่ตท็‚น
  • ๐Ÿ˜Solution 2: set + queue, queue่ฎฐๅฝ•ๆฏไธช็‚น็š„windows ๆฏไธช็‚น ๆ–ฐๅขžๅŠ windowsๆ•ฐ
846. Hand of Straights O(nlogn) O(n) Hard
973. K Closest Points to Origin O(n) average O(1) Easy โœ๏ธQuick-Select
1046. Last Stone Weight O(nlogn) O(n) Easy
ย ย ย ย ย ย ย  ย ย ย  ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย 

Two pointer ็”จไบŽ

  • detect cycle
  • sorted arrayๆฏ”ๅคงๅฐ,ไธ€ไธชarrayไธ€ไธชpointer
  • linked listๆ‰พๅˆฐmiddle point

Two Pointer

Title Time Space Difficulty Algorithm Note
019. Remove Nth Node From End of List O(n) O(1) Medium ๐Ÿ”two pointer, listๆ€ป้•ฟl, ้œ€่ฆremove็š„indexๆ˜ฏl-n, slow่ฆๅ‰่ฟ›ๅˆฐl-n-1, ๆ‰€ไปฅๅ…ˆๅ‰่ฟ›nไธช๏ผŒๅ†ๅ‰่ฟ›ๅˆฐๅฐพ้ƒจๅฐฑๆ˜ฏl-n-1
086. Partition List O(n) O(1) Medium ๐Ÿ”
  • ๅ…ˆๆŠŠheadๆ‰€ๆœ‰ๅฐไบŽx็š„passๆމ,slow,head=firstๅคงไบŽ็ญ‰ไบŽx็š„node, loop fast ๅฝ“fastๅฐไบŽx,ๆŠŠ่ฟ™ไธชๆ”พๅœจslowไธŠ,slowๅ‰่ฟ›ไธ€ไฝ
  • ๅปบไธคไธชnode๏ผŒไธ€ไธชsmall,ไธ€ไธชbig,ๆŠŠๆ‰€ๆœ‰ๅฐไบŽ็š„headๆ”พๅœจsmall๏ผŒๅ…ถไป–็š„ๆ”พๅœจbig๏ผŒๆœ€ๅŽๆŠŠๆ‰€ๆœ‰bigๆŒ‚ๅœจsmall็š„ๅŽ้ข
141. Linked List Cycle O(n) O(1) Easy โŒ
142. Linked List Cycle II O(n) O(1) Medium ๐Ÿ”ๅ…ทไฝ“ๆ•ฐๅญฆ่งฃ้‡Š, ็ฑปไผผ287. Find the Duplicate Number
143. Reorder List O(n) O(1) Medium ๐Ÿ˜š๐ŸŽ… ็”จfast & slowๅ…ˆๆ‰พๅˆฐmedium็š„็‚น๏ผŒslowๅˆฐ็ป“ๅฐพๆ‰€ๆœ‰็š„็‚นreverse, ็„ถๅŽp1 = head, p2 = middleๅŽไธ€็‚น๏ผŒไธ€ไธชp1, ไธ€ไธชp2 ๆ’่ฟ›pointer๏ผŒๅฐฑๆ˜ฏ็ป“ๆžœ
167.Two Sum II - Input array is sorted O(n) O(1) Easy โŒ two pointer, ไธ€ไธชไปŽๅผ€ๅง‹ไฝ็ฝฎ๏ผŒไธ€ไธชไปŽๆœซๅฐพ็š„ไฝ็ฝฎ
283. Move Zeroes O(n) O(1) Easy โŒ ่ฎฐๅฝ•swapๅŽ็ฌฌไธ€ไธช0ไฝ็ฝฎ
287. Find the Duplicate Number O(n) O(1) Easy ๐Ÿ˜๐ŸŽ… ็ฑปไผผ142. Linked List Cycle II ,ๆœ‰duplicateไธ€ๅฎšไผšๆœ‰cycle, ้šพ็‚น: ๆ‰พ่ตท็‚น
  • ๆ‰€ๆœ‰ๆ•ฐ้ƒฝๅœจ[0,n], nextIndex = num-1,ไปŽn+1(indexไธบn)ๅผ€ๅง‹๏ผŒๅฐฑไธไผšไธŠๆฅ่ฟ›ๅ…ฅๅพช็Žฏ
  • ไปŽ0ๅผ€ๅง‹่ฟ›ๅ…ฅ,nextIndex = num
  • ๆฏไธชๆ•ฐๆ•ฐ้ƒฝๅœจ[1,n],ไปŽ0ๅผ€ๅง‹
344. Reverse String O(n) O(1) Easy ๐Ÿ”bitๆฅ่ฟ›่กŒswap
349. Intersection of Two Arrays O(n+m) O(min(m, n)) Easy
  • ็”จhashmap, O(N)
  • binary search, ่ฆsortไธคไธชvector,็„ถๅŽloop v1, ๅˆฐv2ไธญๆ‰พๆœ‰ๆฒกๆœ‰v1[i]่ฟ™ไธชๆ•ฐ
  • two pointer, sortไธคไธชvector,it1=v1.begin(), it2=v2.begin(),็„ถๅŽๆ นๆฎit1,it2ๅคงๅฐ,ๆ›ดๆ–ฐ็ป“ๆžœๅ’Œ่‡ชๅขžit1ๅ’Œit2
350.Intersection of Two Arrays II O(n+m) O(1) Easy โŒ
  • ๅฆ‚ๆžœๆฒกๆœ‰sort, space: O(1) complexity O(max(n,n)*log(max(m,n)) ็š„่งฃไธบbinary search, two pointer
  • ๅฆ‚ๆžœๆœ‰sort, space: O(1) complexity O(m+n)็š„่งฃไธบtwo pointer
  • โœ๏ธC++ Set Intersection
457. Circular Array Loop O(n) O(1) Medium โŒarray loopๅฟ…้กปๆ˜ฏๅ•ๅ‘็š„, ๆฏ”ๅฆ‚1->2, 2->1 ไธ็ฎ—ๆ˜ฏloop๏ผŒๅพช็Žฏarrayๆฏๆฌกไธคไธชpointerๆฃ€ๆŸฅๆœ‰ๆฒกๆœ‰loop,ๅฆ‚ๆžœๆฒกๆœ‰loop,ๆŠŠ่ฟ™ๆฌกๆ‰€ๆœ‰่ตฐ่ฟ‡็š„็‚น้ƒฝๆ ‡ๆˆ0,ไธ‹ๆฌกไธ็”จๅ†่ตฐไบ†, ็ฑปไผผ141. Linked List Cycle
611. Valid Triangle Number O(n^2) O(1) Medium ๐ŸŽ…(ๆ— ๆณ•่พพๅˆฐO(n))๏ผŒๅ…ˆsort็„ถๅŽไธคไธชpointer,ๆฏไธ€ไธช้ƒฝๆŒ‡ๅ‘ไธ€ไธช่พน,
777. Swap Adjacent in LR String O(n) O(1) Medium ๐ŸŽ… ้šพ็‚นๆ˜ฏ: ๅฏปๆ‰พleft ๅ’Œ right. Rๆ˜ฏๅ‘ๅ‰่ตฐ๏ผŒLๆ˜ฏๅ‘ๅŽ่ตฐ๏ผˆswap R ๅ’ŒL้ƒฝ้œ€่ฆX๏ผ‰, ไธคไธชpointer๏ผŒ้‡ๅˆฐXๅพ€ๅ‰่ทณ
826. Most Profit Assigning Work O(mlogm + nlogn) O(1) Medium ๐Ÿ˜๐Ÿ”
  • sort jobs & work, ไธคไธชpt,ไธ€ไธชๆŒ‡worker, ไธ€ไธชๆŒ‡jobs, profit่ฎฐๅฝ•ๅˆฐworker iไน‹ๅ‰ๆœ€ๅคง็š„ๆ”ถ็›Š
  • ็”จไธ€ไธชsize=10001็š„vector, v[i]่กจ็คบ็ฌฌdifficultyไธบiๆ—ถ๏ผŒๆœ€ๅคง็š„profit
828. Unique Letter String O(n) O(1) Hard ๐Ÿ˜๐ŸŽ…
  • ้šพ็‚น:่ฝฌๆขๆ€่ทฏ: ๆ•ฐๆฏไธชsubstring ไธญunqiue ไธชๆ•ฐ = ๆฏไธชไฝ็ฝฎ็š„charๅœจๅคšๅฐ‘ไธชsubstringไธญunique
  • Solution 1: ้œ€่ฆchar ไธŠไธ€ๆฌก ๅ’ŒไธŠไธŠไธ€ๆฌกๅ‡บ็Žฐ็š„ไฝ็ฝฎ, ๆฏ”ๅฆ‚ABAB, (i=3็š„B ็ฎ—็š„i=1 ็š„Bๅœจๅ‡ ไธชsubstringไธญunique, ๅฏไปฅ(ABA)B, A(BA)B, (AB)AB, A(B)AB, ()่กจ็คบsubstring
  • Solution 2 DP:
    • contribution[s[i]] ไปฅs[i]็ป“ๆŸ, s[i]ไธบunique็š„substringไธชๆ•ฐ
    • cur: ไปฅs[i]ไธบend, ๆฏไธชsubstringไธญuniqueไธชๆ•ฐ
    • lastPost[s[i]]: ไธŠๆฌกs[i]ๅ‡บ็Žฐ็š„ไฝ็ฝฎ
    • ้šพ็‚น: ๆ‰พๅˆฐcontributionๅ’Œcur็š„ๅ…ณ็ณป
838. Push Dominoes O(n) O(n) Medium ๐ŸŽ…๐ŸŽ…๐ŸŽ…
844. Backspace String Compare O(m+n) O(1) Easy ไธคไธชpt๏ผŒ้ƒฝไปŽs,t ไปŽๅŽๅพ€ๅ‰ๅฏนๆฏ”
986. Interval List Intersections O(m+n) O(1) Medium

Sort

Title Time Space Difficulty Algorithm Note
056. Merge Intervals O(nlogn) O(n) Medium ็ฑปไผผ็š„้ข˜
057. Insert Interval O(nlogn) O(n) Hard ็ฑปไผผ็š„้ข˜
075. Sort Colors O(n) O(1) Medium ๐ŸŽ… Tri Partition, ๅฐ็š„ๆ”พๅ‰้ข, ๅคง็š„ๆ”พๆœ€ๅŽ
088. Merge Sorted Array O(n) O(1) Easy โŒไปŽๅŽๅพ€ๅ‰
147. Insertion Sort List O(n^2) O(1) Medium ่ทŸ148. Sort List ไธ€ๆ ท
148. Sort List O(nlogn) O(logn) Medium
  • top-down,็”จไธคไธชpointer๏ผŒไธ€ไธชๆ…ข๏ผŒไธ€ไธชๅฟซ๏ผŒๅŽปsplit,็„ถๅŽmerge, space: O(logn)
  • bottom-up, ็ฌฌไธ€ๆฌกๅชๆŠŠ1ๅ’Œ2้กบๅบ๏ผŒ3ๅ’Œ4้กบๅบ๏ผŒ5ๅ’Œ6้กบๅบ่ฐƒๆ•ด๏ผŒ็ฌฌไบŒๆฌกๆŠŠ1๏ผŒ2ๅ’Œ3๏ผŒ4้กบๅบ่ฐƒๆ•ด๏ผŒ5,6ๅ’Œ7๏ผŒ8้กบๅบ่ฐƒๆ•ด๏ผŒไปฅๆญค็ฑปๆŽจ, space: O(1)
164. Maximum Gap O(n) O(n) Hard ๐Ÿ˜๐Ÿ”
  • Bucket Sort, double minstep = (max-min)/(n-1) = bucket_step, bucket (0,1) 0ๆ˜ฏbucket minvalue, 1 ๆ˜ฏmax value, ็ป“ๆžœmax gap=็›ธ้‚ปไธคไธชbucket็š„min[i]-max[i-1]
  • ๐Ÿ”๐Ÿ”radix sort, res = ๆœ€ๅคงไธคไธช็›ธ้‚ป็š„็‚น, radix sortๆŽ’ๅบๆ˜ฏไปŽๅŽๅพ€ๅ‰loop๏ผŒๅ› ไธบไน‹ๅ‰็š„digit็š„ๆ˜ฏsort๏ผŒๅคง็š„digitๅœจๆœ€ๅŽ้ข๏ผŒcount[i]ๆ˜ฏไปŽith-digit็š„ๆœ€ๅŽไธ€ไธชไฝ็ฝฎ
164. Maximum Gap O(n) O(n) Hard ๐Ÿ˜๐Ÿ”
  • Bucket Sort, double minstep = (max-min)/(n-1) = bucket_step, bucket (0,1) 0ๆ˜ฏbucket minvalue, 1 ๆ˜ฏmax value, ็ป“ๆžœmax gap=็›ธ้‚ปไธคไธชbucket็š„min[i]-max[i-1]
  • ๐Ÿ”๐Ÿ”radix sort, res = ๆœ€ๅคงไธคไธช็›ธ้‚ป็š„็‚น, radix sortๆŽ’ๅบๆ˜ฏไปŽๅŽๅพ€ๅ‰loop๏ผŒๅ› ไธบไน‹ๅ‰็š„digit็š„ๆ˜ฏsort๏ผŒๅคง็š„digitๅœจๆœ€ๅŽ้ข๏ผŒcount[i]ๆ˜ฏไปŽith-digit็š„ๆœ€ๅŽไธ€ไธชไฝ็ฝฎ
179. Largest Number O(nlogn) O(n) Medium โœ๏ธโœ๏ธ Python Lambda Sort
218. The Skyline Problem O(nlogn) O(logn) Hard ๐Ÿ˜๐Ÿ˜ priority_queue or multiset(็œ‹critical point)
274. H-Index O(n) O(n) Medium โŒcounting Sort
315. Count of Smaller Numbers After Self O(nlogn) O(n) Hard MergeSort, BIT
324. Wiggle Sort II O(n) average O(1) Medium โŒ(1 + 2*index) % (n | 1)ไฟ่ฏmedianๅทฆ้ขๆ•ฐmapๅฅ‡ๆ•ฐไฝ๏ผŒmediamๅณ้ข็š„ๆ•ฐmapๅถๆ•ฐไฝ
  • (1)elements smaller than the 'median' are put into the last even slots
  • (2) elements larger than the 'median' are put into the first odd slots
  • (3) the medians are put into the remaining slots.
327. Count of Range Sum O(nlogn) O(n) Hard MergeSort with Count, BIT
347. Top K Frequent Elements O(n) O(n) Medium ๐Ÿ˜ Bucket Sort, Quick Select,
  • C++: n-th elements, priority_queue (maxheap: priority_queue, minheap: multiset),
  • python: collections.Count, heapq, most_common(k)
ไธŽ451. Sort Characters By Frequency , 692. Top K Frequent Words ็ฑปไผผ
406. Queue Reconstruction by Height O(n * sqrt(n))~O(n^2) O(n) Medium ๐Ÿ˜š ๅ…ณ้”ฎๆ˜ฏ่ฎคๆธ…sort็š„้กบๅบ ๅ…ˆๆŠŠheightๅคง็š„ๅฎ‰ๆŽ’ไบ†๏ผŒๅฆ‚ๆžœheightไธ€ๆ ทๅ†sort kๆœ‰ๅฐๅˆฐๅคงใ€‚ sqrt(n)่งฃๆ˜ฏไธ€ๆ ท็š„sort๏ผŒไฝ†ๆ˜ฏๆŠŠsortไน‹ๅŽ็š„ๆ’ๅ…ฅๅˆฐไธๅŒ็š„็ป„ไธญ๏ผŒๆฏไธช็ป„ไธ่ถ…่ฟ‡sqrt(n)ไธชๅ…ƒ็ด 
462. Minimum Moves to Equal Array Elements II O(nlogn) O(n) Medium Mediumๆ˜ฏๆœ€ๅฐๅŒ–Sum of Absolute Deviations; Quick Select: O(n) on average
451. Sort Characters By Frequency O(n) O(n) Medium Bucket Sort, Quick Select(n-th elements) O(nlogn), priority_queue O(nlogn)
692. Top K Frequent Words O(nlogk) O(n) Medium Bucket Sort, Quick Select(n-th elements), priority_queue
853. Car Fleet O(nlogn) O(n) Medium Greedy: sort postionๅˆๅคงๅˆฐๅฐ๏ผŒๅ†sortๅˆฐtarget็š„ๆ—ถ้—ด็”ฑๅฐๅˆฐๅคง
1029. Two City Scheduling O(n) average O(n) Easy Greedyๆ€ๆƒณ,quick select
C++priority_queue<pair<int,int>>pq ๅ…ˆๅฏนๆฏ”first, topๆ˜ฏfirstๆœ€ๅคง็š„๏ผŒ
constructor: greater<int>ๆ˜ฏ่ฎฉtop่ฟ”ๅ›žๆœ€ๅฐ็š„ๆ•ฐ,ๅคง็š„ๆ•ฐๆ”พๅŽ้ข
python็š„heappop()ๅ…ˆpopๅฏนๆฏ”first,then second, topๆ˜ฏfirstๆœ€ๅฐ็š„
1365 How Many Numbers Are Smaller Than the Current Number O(n+m) O(m) Easy ๐Ÿ”O(n+m) Solution Counting Sort ๐Ÿ”Python Counting Sort
1366. Rank Teams by Votes O(n) O(1) Medium ๐Ÿ”Python Sort list based on Dictonary value

Recursion

Title Time Space Difficulty Algorithm Note
095. Unique Binary Search Trees II O(4^n / n^(3/2)) O(4^n / n^(3/2)) Medium ๐Ÿ˜ ๐Ÿ”loop start -> end. Generate vector of left subtree ๅ’Œright subtree, ็„ถๅŽๆŽ’ๅˆ—็ป„ๅˆๆŠŠไป–ไปฌๅผ„ๅœจไธ€่ตท
096. Unique Binary Search Trees O(n) O(1) Medium DP, cartesian product
ไฝœไธบroot๏ผŒsum(#left + #right) Catalan number
098. Validate Binary Search Tree O(n) O(1) Medium ็”จprev ็‚น, iterative + recurssion
100. Same Tree O(n) O(h) Easy โŒ
104. Maximum Depth of Binary Tree O(n) O(h) Easy โŒ
105. Construct Binary Tree from Preorder and Inorder Traversal O(n) O(h) Medium ๐Ÿ˜๐Ÿ˜ ๐Ÿ”๐Ÿ”ๆณจๆ„ๅ’Œ889. Construct Binary Tree from Preorder and Postorder Traversal stack็š„ๅŒบๅˆซ. preorder ็ฌฌไธ€ไธชๆ˜ฏtree็š„root, inorder ไธญroot->valๅทฆ้ขroot็š„left tree,ๅณ้ขroot็š„right tree,
106. Construct Binary Tree from Inorder and Postorder Traversal O(n) O(h) Medium ๐Ÿ˜๐Ÿ˜ ๐Ÿ”๐Ÿ” O(1) memory ๅ’Œ stack
108. Convert Sorted Array to Binary Search Tree O(n) O(logn) Easy โŒ ่ทŸ095. Unique Binary Search Trees II้€ป่พ‘ไธ€ๆ ท binary tree height ้œ€่ฆbalanced
109. Convert Sorted List to Binary Search Tree O(n) O(logn) Medium ๐Ÿ”ๆณจๆ„O(N)็š„่งฃ๏ผŒไธๆ˜ฏtwo pointer็š„
110. Balanced Binary Tree O(n) O(h) Medium ๐Ÿ˜š ่ทŸ095. Unique Binary Search Trees II็ฑปไผผ ็”จbottom-up ๆฏ”top-down ๆ›ดefficient
111. Minimum Depth of Binary Tree O(n) O(h) Medium โŒif not left: return h(r.right)+1; , if not right: return h(r.left)+1; else: return min(h(r.right), h(r.left))+1;
114. Flatten Binary Tree to Linked List O(n) O(h) Medium ๐Ÿ”๐Ÿ˜ preorder ็š„reverse
116. Populating Next Right Pointers in Each Node O(n) O(1) Medium ๅฎก้ข˜: perfect binary tree
  • ๆฏๅฑ‚ๆจช็€่ตฐ, ่ฟžleft ๅˆฐright, ่ฟžright ๅˆฐnext left
  • ๆˆ–่€…ๆ˜ฏ้˜ถๆขฏๅผๅ‘ไธ‹connect root1 leftๅ’Œ root1 right & root1 rightๅ’Œroot2 left & root2 leftๅ’Œroot2 right
124. Binary Tree Maximum Path Sum O(n) O(h) Hard ๐Ÿ”not hard question
129. Sum Root to Leaf Numbers O(n) O(h) Medium O(1) extra memory
241. Different Ways to Add Parentheses O(n* 4^n / n^(3/2)) O(n * 4^n / n^(3/2)) Medium ๐Ÿ˜ ็ฎ—signๅ‰็š„๏ผŒ็ฎ—signๅŽ็š„,็„ถๅŽๅšๅ‰ๅ’ŒๅŽ็š„permutationๅ’Œ
337. House Robber III O(n) O(h) Medium ๐ŸŽ…Greedy Algorithm. ่ฟ”ๅ›žvector, vector[0]ๅญ˜็š„ๆ˜ฏ็”จไธŠไธ€ไธชๆœ€ๅคง็š„่Žทๅ–ๅ€ผ๏ผŒvector[1]ๅญ˜็š„ๆ˜ฏไธ็”จไธŠไธ€ไธช ๆœ€ๅคง็š„่Žทๅ–ๅ€ผ
395. Longest Substring with At Least K Repeating Characters O(n) O(n) Medium ๐Ÿ˜๐Ÿ˜
  • Solution 1 Divide-conquer ไธ€ๆ—ฆๅฐไบŽk, ๅฐฑsplitๆˆleftๅ’Œright,็„ถๅŽ่ฟ”ๅ›žleftๅ’Œright็š„maxๅ€ผ
  • Solution 2 two pointer
404. Sum of Left Leaves O(n) O(h) Easy โŒ
437. Path Sum III O(n) O(h) Easy ๐Ÿ”ไธ€ๅฎš็”จunorderedmap , ไธ่ƒฝ็”จunordered_set, ๆฏ”ๅฆ‚ -5,5,-6,6,4, ่ฆsum = 4, ๅฏไปฅไปŽ-5ๅˆฐ4 ๆˆ–่€…-6 ๅˆฐ4
669. Trim a Binary Search Tree O(n) O(h) Easy ๐Ÿ˜š
671. Second Minimum Node In a Binary Tree O(n) O(h) Easy โŒ
761. Special Binary String O(n^2) O(n) Hard โŒBad problem description Divide-conquer, ๆŠŠๆฏไธชspecial string ๅ†ๅˆ†ๆˆๅฐ็š„special string,็„ถๅŽsort


Binary Search

Title Time Space Difficulty Algorithm Note
004. Median of Two Sorted Arrays O(log(min(m, n))) O(1) Hard ๐Ÿ’œ๐ŸŽ…๐ŸŽ…
033. Search in Rotated Sorted Array O(log(n)) O(1) Medium ๐Ÿ’œ๐ŸŽ…Similar Question:
034. Find First and Last Position of Element in Sorted Array O(log(n)) O(1) Medium lowerbound/upperbound/EqualRange, lowerbound ๅฏไปฅconvert to int
35. Search Insert Position O(log(n)) O(1) Easy
069. Sqrt(x) O(log(n)) O(1) Easy ๐ŸŽ… Bit Solution similar Question
074. search a 2D Matrix O(logm + logn) O(1) Medium lower_bound, upper_bound lambda
081. Search in Rotated Sorted Array II O(logn) O(1) Medium ๐Ÿ’œ๐ŸŽ… Similar Question:
153. Find Minimum in Rotated Sorted Array O(logn) O(1) Medium Similar Question:
154. Find Minimum in Rotated Sorted Array II O(logn) ~ O(n) O(1) Hard Similar Question:
162. Find Peak Element O(logn) O(1) Medium โŒ
222. Count Complete Tree Nodes O((logn)^2) O(1) Medium ๆณจๆ„ๅฎก้ข˜ complete tree
275. H-Index II O(logn) O(1) Medium
278. First Bad Version O(logn) O(1) Easy
300. Longest Increasing Subsequence O(nlogn) O(n) Medium ๐Ÿ’œ๐ŸŽ…๐ŸŽ…๐ŸŽ…ย similar question
354. Russian Doll Envelopes O(nlogn) O(n) Hard ๐Ÿ’œ๐ŸŽ…similar question
363. Max Sum of Rectangle No Larger Than K O(min(m, n)^2 * max(m, n) * logn(max(m, n))) O(max(m, n)) Hard ๐Ÿ’œ๐ŸŽ…๐ŸŽ…, ๅˆฉ็”จSet
367. Valid Perfect Square O(logn) O(1) Easy Similar Question
374. Guess Number Higher or Lower O(logn) O(1) Easy
378. Kth Smallest Element in a Sorted Matrix O(n * log(MAX - MIN) O(1) Medium l=m[0][0], r=m[-1][-1], binary search ๆ˜ฏๅฆ่‡ณๅฐ‘ๆœ‰kไธชๆ•ฐๅฐไบŽ็ญ‰ไบŽmid
410. Split Array Largest Sum O(nlogn) O(1) Hard ๐Ÿ’œ
436. Find Right Interval O(nlogn) O(n) Medium map lower bound
475. Heaters O((m + n) * logn) O(1) Easy
  • sort heater + lower_bound
  • sort house sort heaters,้€ๆธ้€’ๅขžindex
540. Single Element in a Sorted Array O(logn) O(1) Medium
658. Find K Closest Elements O(logn+k) O(1) Medium x-arr[left-1]<=arr[right]-x ไฟ่ฏleftไธ€ๅฎšๆ˜ฏ่ตท็‚น๏ผŒrightๆ˜ฏๆœ€ๅŽๆ•ฐๅŽ้ขไธ€ไฝ
668. Kth Smallest Number in Multiplication Table O(log(mn)*min(n,n)) O(1) Hard binary search [1,m*n], isValidๅˆคๆ–ญๆ˜ฏๅฆๆœ‰่‡ณๅฐ‘ๆœ‰kไธชelementๅœจไน˜ๆณ•่กจไธญ
719. Find K-th Smallest Pair Distance O(nlogn + nlogw) O(1) Hard sort nums, l=0, r = nums[-1]-nums[0], binary searchๆ˜ฏๅฆๆœ‰kไธชๆ•ฐๅคงไบŽ็ญ‰ไบŽmidๅœจnumไธญ
744. Find Smallest Letter Greater Than Target O(logn) O(1) Easy ๅˆคๆ–ญๆœ€ๅŽไธ€ไธชๅญ—ๆฏๆ˜ฏไธๆ˜ฏๅคงไบŽtarget, ๅคงไบŽ็š„่ฏ็”จupperbound๏ผŒๅฆๅˆ™่ฟ”ๅ›ž็ฌฌไธ€ไธชchar
786. K-th Smallest Prime Fraction O(nlogr) O(1) Hard
  • ็”จpriority_queue, ๅ…ˆpush่ฟ›ๆœ€ๅฐ็š„๏ผŒๆฏๆฌกpushๅ‰extractๅฝ“ๅ‰ๆœ€ๅฐ็š„, ไฟ่ฏpush่ฟ›ๅŽป็š„ๆฏ”pop็š„ๅคง๏ผŒๆœ€ๅคšmax(n,k)ๆฌกpop+push
  • binary search l=0, r=1, ็œ‹ๆ˜ฏไธๆ˜ฏๆœ‰nไธชpairๅฐไบŽ็ญ‰ไบŽmid๏ผŒi=0,ๅขžๅŠ j,ๅ‡ๅฐA[i]/[j]็š„ๅ€ผ๏ผŒไธ€ๆ—ฆA[i]/[j]ๅฐไบŽ็ญ‰ไบŽmid๏ผŒๅขžๅŠ i,ๅฐฑๆ˜ฏๅขžๅŠ A[i]/[j], ๅ†ๅขžๅŠ j, ๅฆ‚ๆžœcount==k, ่ฟ”ๅ›žkไธญๆœ€ๅคง็š„้‚ฃไธชpair
    793.Preimage Size of Factorial Zeroes Function O((logk)^2) O(1) Hard l = 0, r=5*k, binary search midๆ˜ฏๅฆๆœ‰kไธช้›ถ็š„0๏ผŒๆœ‰็š„่ฏr=mid, ๅฆๅˆ™l = mid+1, ๆœ€ๅŽๅ†ๅˆคๆ–ญlๆ˜ฏๅฆๆœ‰kไธช0, ๆœ‰็š„่ฏ่ฟ”ๅ›ž5,ๆฒกๆœ‰็š„่ฏ่ฟ”ๅ›ž0
    1385. Find the Distance Value Between Two Arrays O((n + m) * logm) O(1) Easy ๐ŸŽ…Binary Search, Two pointer


    Binary Search Tree

    Title Time Space Difficulty Algorithm Note
    220. Contains Duplicate III O(nlogn) O(n) Medium set/multiset lower_bound ย ๆˆ–่€…python OrderedDict, ๆฏๆฌกpopitem(false) pop ๆœ€ๅ…ˆinsert็š„
    230 Kth Smallest Element in a BST O(max(h, k)) O(min(h, k)) Medium inorder traversals(ไปŽๆœ€ๅฐ็š„travelๅˆฐๆœ€ๅคง็š„) / stack
    235. Lowest Common Ancestor of a Binary Search Tree O(h) O(1) Easy ๅˆฉ็”จย binary search tree็š„ๆ€ง่ดจ
    352. Data Stream as Disjoint Intervals O(logn) O(n) Hard
    449. Serialize and Deserialize BST O(n) O(h) Medium preorder traversals
    450. Delete Node in a BST O(h) O(h) Medium
    • swap key ๅ’Œๆฏ”keyๅคง็š„ๆœ€ๅฐๅ€ผ๏ผŒ็„ถๅŽrecursivelyๅˆ ้™คswap็š„ๅ€ผ
    • ๆŠŠkey็š„left tree ๆŒ‚ๅœจkey->right็š„leftmost treeไธ‹้ข๏ผˆๆฏ”keyๅคง็š„ๆœ€ๅฐๆ•ฐไธ‹้ข๏ผ‰
    530. Minimum Absolute Difference in BST O(n) O(h) Easy ๅˆฉ็”จbinary search tree็š„ๆ€ง่ดจ ๆˆ–่€…inorder traversal ๅธฆ็€ๅ‰้ขprev็š„node val
    783. Minimum Distance Between BST Nodes O(n) O(h) Easy ๅˆฉ็”จbinary search tree็š„ๆ€ง่ดจ ๆˆ–่€…inorder traversal ๅธฆ็€ๅ‰้ขprev็š„node val(ไธŽ530้ข˜ ่งฃๆณ•ไธ€ๆ ท)
    1382 Balance a Binary Search Tree O(n) O(h) Medium


    Tree Relevant

    Title Time Space Difficulty Algorithm Note
    094. Binary Tree Inorder Traversal O(n) O(1) Medium Tree
    095. Unique Binary Search Trees II O(4^n / n^(3/2)) O(4^n / n^(3/2)) Medium ๐Ÿ˜ ๐Ÿ”loop start -> end. Generate vector of left subtree ๅ’Œright subtree, ็„ถๅŽๆŽ’ๅˆ—็ป„ๅˆๆŠŠไป–ไปฌๅผ„ๅœจไธ€่ตท
    098. Validate Binary Search Tree O(n) O(1) Medium ็”จprev ็‚น, iterative + recurssion
    099 Recover Binary Search Tree O(n) O(1) Hard Tree
    100. Same Tree O(n) O(h) Easy โŒ
    104. Maximum Depth of Binary Tree O(n) O(h) Easy โŒ
    101. Symmetric Tree O(n) O(h) Easy โŒ ๆณจ: iterative stack push ้กบๅบ
    108. Convert Sorted Array to Binary Search Tree O(n) O(logn) Easy โŒ ่ทŸ095. Unique Binary Search Trees II้€ป่พ‘ไธ€ๆ ท binary tree height ้œ€่ฆbalanced
    109. Convert Sorted List to Binary Search Tree O(n) O(logn) Medium ๐Ÿ”ๆณจๆ„O(N)็š„่งฃ๏ผŒไธๆ˜ฏtwo pointer็š„
    110. Balanced Binary Tree O(n) O(h) Medium ๐Ÿ˜š ่ทŸ095. Unique Binary Search Trees II็ฑปไผผ ็”จbottom-up ๆฏ”top-down ๆ›ดefficient
    111. Minimum Depth of Binary Tree O(n) O(h) Medium โŒif not left: return h(r.right)+1; , if not right: return h(r.left)+1; else: return min(h(r.right), h(r.left))+1;
    112. Path Sum O(n) O(h) Easy ๐Ÿ”(iterative Solution: ๅฆ‚ๆžœๆœ‰rightไผš็ป่ฟ‡root ไธคๆฌก)[https://github.com/beckswu/Leetcode/blob/master/DFS/112.%20Path%20Sum.cpp#L74]
    124. Binary Tree Maximum Path Sum O(n) O(h) Hard ๐Ÿ”not hard question
    129. Sum Root to Leaf Numbers O(n) O(h) Medium O(1) extra memory
    144. Binary Tree Preorder Traversal O(n) O(1) Medium Tree
    145. Binary Tree Postorder Traversal O(n) O(1) Hard Tree
    199 Binary Tree Right Side View O(n) O(h) Medium โŒ Easy
    222. Count Complete Tree Nodes O((logn)^2) O(1) Medium
    257 Binary Tree Paths O(n * h) O(h) Easy โŒ Easy
    404. Sum of Left Leaves O(n) O(h) Easy โŒ
    437. Path Sum III O(n) O(h) Easy unorderedmap ๅญ˜็š„ๅœจ็Žฐๅœจ็‚นไน‹ๅ‰็š„ <prefix sum, frequency> pairs. ไปŽไธญ้—ดๆŸ็‚นๅˆฐ็Žฐๅœจsum = ไปŽrootๅˆฐ็Žฐๅœจ็‚นsum - rootๅˆฐไธญ้—ดๆŸ็‚น็š„sum
    515. Find Largest Value in Each Tree Row O(n) O(h) Medium โŒ DFS / BFS
    538. Convert BST to Greater Tree O(n) O(h) Easy Tree
    543. Diameter of Binary Tree O(n) O(h) Easy Tree
    572. Subtree of Another Tree O(m * n) O(h) Easy
    617. Merge Two Binary Trees O(n) O(h) Easy
    623. Add One Row to Tree O(n) O(h) Medium
    637. Average of Levels in Binary Tree O(n) O(h) Easy
    653. Two Sum IV - Input is a BST O(n) O(h) Easy
    671. Second Minimum Node In a Binary Tree O(n) O(h) Easy โŒ
    687. Longest Univalue Path O(n) O(h) Easy
    669. Trim a Binary Search Tree O(n) O(h) Easy ๐Ÿ˜š
    814. Binary Tree Pruning O(n) O(h) Medium
    863. All Nodes Distance K in Binary Tree O(n) O(h) Medium ๐Ÿ˜๐Ÿ˜Really good question! ไธๅฟ…็บ ็ป“ไบŽone pass, ้œ€่ฆchild -> parent map
    865. Smallest Subtree with all the Deepest Nodes O(n) O(h) Medium ๐Ÿ”DFS, left level == right level ่ฟ”ๅ›žroot, if left level > right level, ่ฟ”ๅ›žleft dfs็š„node else่ฟ”ๅ›žright dfs็š„
    889. Construct Binary Tree from Preorder and Postorder Traversal O(n) O(h) Medium ๐Ÿ˜๐Ÿ˜
    • Solution 1: ้šพ็‚นๆ˜ฏๆ‰พๅˆฐ left ๅ’Œright็š„่พน็•Œ: ๅ‡ๅฎš้ƒฝๆŠŠไธ‹ไธ€ไธชassign ็ป™left
    • ็”จstack
    1008. Construct Binary Search Tree from Preorder Traversal O(n) O(h) Medium ๐Ÿ”Stack / Morris Traversal
    1028. Recover a Tree From Preorder Traversal O(n) O(h) Hard ๐Ÿ˜š stack / DFS, stack้€ป่พ‘็ฑปไผผ889. Construct Binary Tree from Preorder and Postorder Traversal
    1367 Linked List in Binary Tree O(n+l) O(h+l) Medium
    ย ย ย ย ย ย ย  ย ย ย  ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย 

    Depth-First Search

    Title Time Space Difficulty Algorithm Note
    112. Path Sum O(n) O(h) Easy ๐Ÿ”iterative Solution: ๅฆ‚ๆžœๆœ‰rightไผš็ป่ฟ‡root ไธคๆฌก
    113 Path Sum II O(n) O(h) Medium ๐Ÿ”iterative Solution: ๅฆ‚ๆžœๆœ‰rightไผš็ป่ฟ‡root ไธคๆฌก
    199 Binary Tree Right Side View O(n) O(h) Medium โŒ Easy
    200 Number of Islands O(m * n) O(m * n) Medium โœ๏ธ Union Find with Rank Heuristics, โœ๏ธPython Complex number ่กจ็คบๅ››ไธชDFS ๆ–นๅ‘
    236 Lowest Common Ancestor of a Binary Tree O(n) O(h) Medium ๐Ÿ” Iterative Solution
    257 Binary Tree Paths O(n * h) O(h) Easy โŒ Easy
    282 Expression Add Operators O(4^n) O(n) Hard ๐ŸŽ…้šพ็‚น: ๅผ„ๆธ… cv (cumulative sum), pv(previous sum) ๅ…ณ็ณป,
    pos ๅˆฐ็Žฐๅœจprocess็š„index๏ผŒๆณจๆ„:
    • ็Žฐๅœจๆ˜ฏ'*', cv = cv - pv + p*n, pv = pv*n
    • ็Žฐๅœจๆ˜ฏ'-', cv = cv - pv + n, pv = -n
    301. Remove Invalid Parentheses O(C(n, c)) O(c) Hard ๐Ÿ˜๐Ÿ˜Complexity Analysis
    • ๐ŸŽ…DFS: ๅผ€ๅง‹DFSๅ‰่ฎฐๅฝ•left_removed๏ผŒ
      right_removed, ่ฟ™ๆ ทๅฏไปฅไฟ่ฏๅˆ ้™ค็š„parenthese ๆœ€็Ÿญ๏ผŒ
      ๅ†่ฎฐๅฝ•pair๏ผŒ'(' ๆ—ถๅ€™pair+1, ')'ๆ—ถๅ€™pair-1๏ผŒ pairๆœ€ๅŽ็ญ‰ไบŽ0๏ผŒ ่กจ็คบvalid
    • ๐Ÿ”BFS, First try all possible resultsๅฝ“็งป่ตฐไธ€ไธชๆ‹ฌๅท, ๅฝ“ไธคไธชๆ‹ฌๅท...until find valid ็”จunordered_set ่ฎฐๅฝ•ๆ‰€ๆœ‰่ขซvisited็š„string๏ผŒOr TLE
    • ๐ŸŽ…BrainStorming More Efficient DFS
    329. Longest Increasing Path in a Matrix O(m * n) O(m * n) Hard ๐Ÿ˜
    332. Reconstruct Itinerary O(t! / (n1! * n2! * ... nk!)) O(t) Medium ๐Ÿ˜
    399. Evaluate Division O(q*|V|!) O(e) Medium DFS with memiozation ็”จunordered_map, vector, unordered_set่ฎฐๅฝ•ๆ˜ฏๅฆ็ป่ฟ‡๏ผŒ ่ทŸ329. Longest Increasing Path in a Matrix็ฑปไผผ
    417. Pacific Atlantic Water Flow O(m * n) O(m * n) Medium ๐Ÿ˜๐ŸŽ… bit mask, ้šพ็‚น: ่ตท็‚นๅฟ…้กปๆ˜ฏๅ››ไธช่พน
    440. K-th Smallest in Lexicographical Order O(logn) O(logn) Hard ๆ‰พ่ง„ๅพ‹, ไธ่ƒฝไธ€ไธชไธ€ไธช็ฎ—, ่ฆ่ทณ็ผฉๅ‡ๅŒบ้—ด
    464. Can I Win O(n!) O(n) Medium ๐Ÿ˜šDFS+Memoization ้šพ็‚น: Memoization่ฎฐๅฝ•็š„ไธ่ƒฝๆ˜ฏ่ฟ˜ๅ‰ฉๅคšๅฐ‘ๅˆฐtarget, ่ฎฐๅฝ•ๆ˜ฏ็Žฐๅœจๅฏ้€‰ๆ‹ฉ็š„set่ƒฝไธ่ƒฝ่ตข
    515. Find Largest Value in Each Tree Row O(n) O(h) Medium โŒ DFS / BFS
    547. Friend Circles O(n^2) O(n) Medium Union Find with Rank Heuristic / DFS
    638. Shopping Offers O(n * 2^n) O(n) Medium ๐ŸŽ…โœ๏ธ [่ฎพ่ฎกไธ€ไธชๅฅฝ็š„DFS structure](https://github.com/beckswu/Leetcode/blob/master/DFS/638.%20Shopping%20Offers.cpp#L42]
    690. Employee Importance O(n) O(h) Easy ้œ€่ฆ็”จunordered_map, ๅ› ไธบvector index ไธ็ญ‰ๅŒไบŽ id
    695. Max Area of Island O(m*n) O(m*n) Medium โœ๏ธPython Complex number ่กจ็คบๅ››ไธชDFS ๆ–นๅ‘
    733. Flood Fill O(m*n) O(m*n) Easy โŒ
    749. Contain Virus O((m * n)^(4/3)) O(m * n) Hard ๐Ÿ˜š DFS/BFS, every step try each possibility see where is max new Infection area, then build wall and update grid
    753. Cracking the Safe O(k^n) O(k^n) Hard ๐ŸŽ… Greedy + BrainStorming, ้šพ็‚น:ๅฆ‚ๆžœ่ฎพ็ฝฎ่ตทๅง‹ๆ•ฐๅญ—๏ผŒๅฆ‚ไฝ•Loop ไธไผšๆœ‰deadlock
    756. Pyramid Transition Matrix O(a^b) O(a^b) Medium bottom-up, bit mask
    785. Is Graph Bipartite? O(|V+E|) O(|V|) Medium DFS/BFS + Bit Mask, ็”จ็บข่“ไธค่‰ฒ่กจvertex๏ผŒๅฆ‚ๆžœ็›ธ้‚ป็š„node ไธ€ๆ ท้ขœ่‰ฒ return false
    797. All Paths From Source to Target O(p + r * n) O(n) Medium โŒ
    802. Find Eventual Safe States O(|V+E|) O(|V|) Medium ๐Ÿ˜š DFS + bit mask ้œ€่ฆๅฎšไน‰state 0๏ผšunvisited, 1 visited not safe, 2 visited not safe, 3 visited and safe ๆณจๆ„ไธ่ƒฝ็”จvisited ็š„value ไปฃๆ›ฟboolean ็š„value
    886. Possible Bipartition O(|V+E|) O(|V+E|) Medium DFS, BFS
    980. Unique Paths III O((m * n) * 2^(m * n)) O((m * n) * 2^(m * n)) Medium DFS, BFS
    1367 Linked List in Binary Tree O(n+l) O(h+l) Medium KMP ๐Ÿ”C++ ็”จconst auto [] get function return pair
    1368 Minimum Cost to Make at Least One Valid Path in a Grid O(m*n) O(m*n) Medium BFS + DFS
    1377. Frog Position After T Seconds O(n) O(n) Hard โœ๏ธPython Set
    1391. Check if There is a Valid Path in a Grid O(m*n) O(1) Medium
    1397. Count Number of Teams O(m*n) O(m) Hard DFS /DP + KMP ๐ŸŽ…๐ŸŽ…ย 


    Backtracking

    Title Time Space Difficulty Algorithm Note
    017. Letter Combinations of a Phone Number O(n * 4^n) O(n) Medium โœ๏ธPython Lambda Function
    022. Generate Parentheses O(4^n / n^(3/2)) O(n) Medium โœ๏ธPython Trick
    037. Sudoku Solver O((9!)^9) O(1) Hard ๅฏไปฅ็”จbit mask
    039. Combination Sum O(k * n^k) O(k) Medium โœ๏ธPython Trick, Difference between yield and return
    040. Combination Sum II O(n * n!) O(n) Medium
    216. Combination Sum III O(k * C(n, k)) O(k) Medium ๐Ÿ”Python itertools.combination
    046. Permutations O(\n * n!) O(n) Medium
    047. Permutations II O(\n * n!) O(n) Medium
    051. N-Queens O(n!) O(n) Hard ๐Ÿ”Python Solution
    052. N-Queens-II O(n!) O(n) Hard โŒ ไธŽ051. N-Queens ้€ป่พ‘ไธ€ๆ ท
    077. Combinations O(k * C(n, k)) O(k) Medium ๐Ÿ˜ Python Multiple Solution
    079. Word Search O(m * n * l) O(l) Medium Simple DFS. smart way: ๆŠŠvisited็š„ๅญ—ๆฏๆ”นไบ† ็œๆމไบ†hashset, visited
    093. Restore IP Addresses O(1) O(1) Medium recursive & iterative
    078. Subsets O(n * 2^n) O(1) Medium ๐Ÿ˜๐Ÿ˜
    • recursive
    • iterative
    • bit trick ็ฌฌไธ€ไธชๆ•ฐๆฏ2ๆฌกๅ‡บ็Žฐ1ๆฌก๏ผŒ็ฌฌไบŒไธชๆ•ฐๆฏ4ๆฌกๅ‡บ็Žฐ2ๆฌก๏ผŒ็ฌฌไบŒไธชๆ•ฐๆฏ8ๆฌกๅ‡บ็Žฐ4ๆฌก
    090. Subsets II O(n * 2^n) O(1) Medium recursive(้€ป่พ‘็ฑปไผผ040. Combination Sum II) & ๐Ÿ˜๐Ÿ˜ iterative๏ผˆๆ’ๆ•ฐ๏ผ‰
    126. Word Ladder II O(n * d) O(d) Hard
    • two end pointer BFS
    • โœ๏ธunordered_multimap, equal_range
    • ๐Ÿ”็”จDFS TLE , ไธๅˆ ้™คๅทฒ่ตฐ่ทฏๅพ„ TLE
    131. Palindrome Partitioning O(n^2) ~ O(2^n) O(n^2) Medium ๐Ÿ˜Python Solution
    140. Word Break II O(n * l^2 + n * r) O(n^2) Hard ๐ŸŽ…DFS with Memoization, ๆฒกๆœ‰memoization TLE, โœ๏ธC++ Std:function
    212. Word Search II O(m * n * l) O(l) Hard Suffix Trie (backtracking ๆ˜ฏๆŠŠboard ๆš‚ๆ—ถๆ”นไบ†, ็œๅŽปไบ†hashset visited), ้šพๅบฆmediumๅทฆๅณ, โœ๏ธPython Complex number ่กจ็คบๅ››ไธชDFS ๆ–นๅ‘, Dictionary setdefault
    526. Beautiful Arrangement O(n!) O(n) Medium swap, ๆณจๆ„if ๆกไปถ, ๐Ÿ”Python Solution
    676. Implement Magic Dictionary O(n) O(d) Medium
    • ๐Ÿ˜šSuffix Trie
    • instead search every chars from A-Z, search hello as ello, hllo
    679. 24 Game O(1) O(1) Hard Complexity: upper bound of 12* 6 * 2 * 4 * 4 * 4 = 9216 possibilities๐Ÿ”๐Ÿ” Python Solution
    698. Partition to K Equal Sum Subsets O(n* 2^n) O(2^n) Medium ๐Ÿ˜๐Ÿ˜ ้žๅธธ็ปๅ…ธ้ข˜็›ฎ,
    • ๐Ÿ”Solution 1: Bucket, ้œ€่ฆsort, ๅฆๅˆ™TLE
    • Solution 2: ่ฆๆœ‰start index, ๅฆๅˆ™time out
    718. Maximum Length of Repeated Subarray O(m * n) O(min(m, n)) Medium ๐Ÿ” DP
    784. Letter Case Permutation _O(n * 2^n) _ O(1) Easy โœ๏ธPython itertools.product

    Graph

    Title Time Space Difficulty Algorithm Note
    1361. Validate Binary Tree Nodes O(n) O(n) Medium DFS


    DFS ๆ˜ฏ็œ‹ๆœ‰ๆฒกๆœ‰path๏ผŒDPๆ˜ฏ็œ‹ๆœ‰ๅ‡ ไธชpath

    Dynamic Programming

    Title Time Space Difficulty Algorithm Note
    010. Regular Expression Matching O(m*n) O(n) Hard ๐ŸŽ…๐ŸŽ…
    044. Wildcard Matching O(n*m) O(1) Hard dp or greedy (GreedyไนŸๆ˜ฏ O(n*m) )
    053. Maximum Subarray O(n) O(1) Easy ๐Ÿ˜ ๆ›ดๆ–ฐres, minsum ็š„้กบๅบ
    062. Unique Paths O(m * n) O(m + n) Medium
    063. Unique Paths II O(m * n) O(m + n) Medium
    064. Minimum Path Sum O(m * n) O(m + n) Medium
    070. Climbing Stairs O(n) O(1) Easy
    072. Edit Distance O(m*n) O(m+n) Hard ็ฑปไผผ็š„้ข˜:
    087. Scramble String O(n^4) O(n^3) Hard ๐ŸŽ… Memoization
    091. Decode Ways O(n) O(1) Medium ๐Ÿ˜๐Ÿ˜๐ŸŽ… similar question: 062. Unique Paths, 070. Climbing Stairs 509. Fibonacci Number
    097. Interleaving String O(m*n) O(m+n) Hard ๐ŸŽ… DP, DFS, BFS
    115. Distinct Subsequences O(n^2) O(n) Hard ๐ŸŽ…๐ŸŽ…
    ็ฑปไผผ็š„้ข˜:
    120. Triangle O(m*n) O(n) Medium Bottom-up DP
    123. Best Time to Buy and Sell Stock III O(n) O(n) Hard ๐ŸŽ…๐ŸŽ…Why variables order doesn't matter
    ็ฑปไผผ
    132. Palindrome Partitioning II O(n^2) O(n)
    ~O(n)
    Hard ๐ŸŽ…๐ŸŽ…
    ็ฑปไผผ็š„้ข˜:
    139. Word Break O(n^2) O(n) Medium
    • DP
    • Suffix Trie + DP
    152. Maximum Product Subarray O(n) O(1) Medium ๐ŸŽ…๐ŸŽ…Prefix Product, Suffix Product
    174. Dungeon Game O(n+m) O(n)~O(1) Hard ๐ŸŽ… bottom-up DP, Can't start at (0,0)
    188. Best Time to Buy and Sell Stock IV O(k*n) O(n) Hard ็ฑปไผผ็š„้ข˜
    198. House Robber O(n) O(1) Easy Top-down / bottom-up
    ็ฑปไผผ็š„้ข˜:
    213. House Robber II O(n) O(1) Medium ๅˆ†ๆˆไธคไธชhouse rob้—ฎ้ข˜๏ผŒ
    • Rob houses 0 to n - 2
    • Rob houses 1 to n - 1

    ็ฑปไผผ็š„้ข˜:
    221. Maximal Square O(n^2) O(n) Medium ็ฑปไผผ็š„้ข˜:
    279. Perfect Squares O(n * sqrt(n) O(n) Medium Bottom-Up DP, Top-Down DP,BFS. Similar Question
    304. Range Sum Query 2D - Immutable ctor: O(m * n), lookup: O(1) O(m+n) Medium ็ฑปไผผ็š„้ข˜:
    309. Best Time to Buy and Sell Stock with Cooldown O(n) O(1) Medium
    312. Burst Balloons O(n^3) O(n^2) Hard Top-Down / Bottom-up, Similar Question: 546. Remove Boxes
    322. Coin Change O(n*k) O(k) Medium Bottom-up, Top-Down, BFS, Similar Question
    338. Counting Bits O(n) O(n) Medium Math ๆ‰พ่ง„ๅพ‹
    357. Count Numbers with Unique Digits O(n) O(1) Medium ๐ŸŽ…DP, Static DP, backtracking
    368. Largest Divisible Subset O(n^2) O(n) Medium ๐ŸŽ…๐ŸŽ…Key: a < b < c, if c % b = 0 and b % a = 0 Then c % a == 0
    ็ฑปไผผ้ข˜๏ผš
    375. Guess Number Higher or Lower II O(n^2) O(n^2) Medium ๐ŸŽ…
    377. Combination Sum IV O(nlogn + n * t) O(t) Medium Similar Question
    403. Frog Jump O(n^2) O(n^2) Hard ็ปๅ…ธ, TopDown, Bottom-up, BFS
    416. Partition Equal Subset Sum O(n*s) O(s) Medium backtracking / DP
    446. Arithmetic Slices II - Subsequence O(n^2) O(n*d) Hard ๐ŸŽ…
    466. Count The Repetitions O(s1 * min(s2, n1)) O(s2) Hard ๐ŸŽ…๐ŸŽ…
    467. Unique Substrings in Wraparound String O(n) O(1) Medium ็ปๅ…ธ๐ŸŽ…๐ŸŽ…
    472. Concatenated Words O(n * l^2) O(l) hard suffix Trie
    474. Ones and Zeroes O(s *m * n) O(s *m * n) Medium ็ปๅ…ธ๐ŸŽ…, Top-Down, Bottom-up
    486. Predict the Winner O(n^2) O(n) Medium ็ปๅ…ธ๐ŸŽ…๐ŸŽ…, DP่งฃ, DFS
    514. Freedom Trail O(k) ~ O(k * r^2) O(r) Hard ็ปๅ…ธ๐ŸŽ…๐ŸŽ…, Top-Down, Bottom-upย 
    516. Longest Palindromic Subsequence O(n^2) O(n) Medium ็ปๅ…ธ๐ŸŽ…, Bottom-up, Top-Down
    ็ฑปไผผ็š„้ข˜:
    518. Coin Change 2 O(n^2) O(n) Medium ็ปๅ…ธ๐ŸŽ…TopDown, Bottom-up
    546. Remove Boxes O(n^3) ~ O(n^4) O(n^3) Hard ๐ŸŽ…๐ŸŽ…๐ŸŽ… Top-Down, Bottom-up, Similar Question: 312. Burst Balloons
    552. Student Attendance Record II O(n) O(1)~O(n) Hard ๐ŸŽ… Derive Relation
    576. Out of Boundary Paths O(N * m * n) O(m * n) Medium DP, DFS, BFS
    583. Delete Operation for Two Strings O(m*n) O(n) Medium Edit Distance without replace
    ็ฑปไผผ้ข˜:
    600. Non-negative Integers without Consecutive Ones O(1) O(1) Hard ๐ŸŽ…๐ŸŽ… Math & Bit
    629. K Inverse Pairs Array O(n*k) O(k) Hard ๐ŸŽ…ๆ‰พ่ง„ๅพ‹
    639. Decode Ways II O(n) O(1) Hard ๐ŸŽ… ๅทง่งฃ
    ็ฑปไผผ็š„้ข˜: 091. Decode Ways
    650. 2 Keys Keyboard O(sqrt(n)) O(1) Medium ๐ŸŽ… Greedy / DP prime factoring
    664. Strange Printer O(n^3) O(n^2) Hard ๐ŸŽ…๐ŸŽ…
    ็ฑปไผผ็š„้ข˜:
    673. Number of Longest Increasing Subsequence O(n^2) O(n) Medium ๐Ÿ’œ๐ŸŽ…๐ŸŽ…
    688. Knight Probability in Chessboard O(k*n^2) O(k*n^2)
    ~O(n^2)
    Medium ๐Ÿ’œ Bottom-up, Top-Down
    689. Maximum Sum of 3 Non-Overlapping Subarrays O(n) O(n) Hard ๐ŸŽ…๐ŸŽ…๐ŸŽ… sliding windows/ DP similar to Stock Purchasing
    ็ฑปไผผ็š„้ข˜
    691. Stickers to Spell Word O(2^T*S*T) O(2^T) Hard ๐ŸŽ…๐ŸŽ…๐ŸŽ…
    712. Minimum ASCII Delete Sum for Two Strings O(m*n) O(m*n)
    ~O(n)
    Medium Edit Distance
    ็ฑปไผผ็š„้ข˜:
    714. Best Time to Buy and Sell Stock with Transaction Fee O(n) O(n) Medium
    730. Count Different Palindromic Subsequences O(n^2) O(n) Hard HardไธญHard ๐ŸŽ…๐ŸŽ…๐ŸŽ…
    740. Delete and Earn O(n) O(n) Medium ็ฑปไผผ็š„้ข˜:
    741. Cherry Pickup O(n^3) O(n^2) Hard ๐ŸŽ…๐ŸŽ…๐ŸŽ…
    746. Min Cost Climbing Stairs O(n) O(1) Easy
    764. Largest Plus Sign O(n^2) O(n^2) Medium Maximal Square, ไปŽๅทฆๅˆฐๅณ๏ผŒไปŽไธŠๅˆฐไธ‹๏ผŒไปŽๅณๅˆฐๅทฆ๏ผŒไปŽไธ‹ๅˆฐไธŠ,ๆ›ดๆ–ฐๆœ€ๅฐ็š„count ็ฑปไผผ็š„้ข˜:
    788. Rotated Digits O(n)~O(logn) O(n)~O(logn) Easy ๐ŸŽ…๐ŸŽ…๐ŸŽ…
    790. Domino and Tromino Tiling O(n) O(n)~O(1) Medium ๐ŸŽ…๐ŸŽ… Math ๆ‰พ่ง„ๅพ‹
    799. Champagne Tower O(n^2) O(n^2)~O(n) Medium
    801. Minimum Swaps To Make Sequences Increasing O(n) O(1) Medium ๐ŸŽ…
    805. Split Array With Same Average O(n^4) O(n^3) Hard ๐Ÿ’œ ๐ŸŽ…๐ŸŽ…๐ŸŽ… totalSum/n = Asum/k = Bsum/(n-k)
    808. Soup Servings O(1) O(1) Medium
    813. Largest Sum of Averages O(k*n^2) O(n) Medium ๐Ÿ’œ๐ŸŽ…๐ŸŽ…๐ŸŽ…
    818. Race Car O(nlogn) O(n) Hard ๐ŸŽ…๐ŸŽ…๐ŸŽ…
    823. Binary Trees With Factors O(n^2) O(n) Medium ็ฑปไผผ้ข˜๏ผš ย 
    837. New 21 Game O(n) O(n) Medium ๐ŸŽ…๐ŸŽ…๐ŸŽ…
    847. Shortest Path Visiting All Nodes O(n*2^n) O(n*2^n) Hard BFS/DP๐ŸŽ…
    877. Stone Game O(n^2) O(n) Medium Strategy
    879. Profitable Schemes O(n*g*p) O(g*p) Hard ๐Ÿ’œ๐ŸŽ…
    903. Valid Permutations for DI Sequence O(n^2) O(n) Hard ๐Ÿ’œ๐ŸŽ…๐ŸŽ…
    920. Number of Music Playlists O(n*l) O(n) Hard ๐ŸŽ…๐ŸŽ…๐ŸŽ…
    926. Flip String to Monotone Increasing O(n) O(n) Medium ๐Ÿ’œ๐ŸŽ…๐ŸŽ…
    931. Minimum Falling Path Sum O(n^2) O(n) Medium
    926. Flip String to Monotone Increasing O(n) O(n) Medium ๐Ÿ’œ
    935. Knight Dialer O(logn) O(1) Medium ๐Ÿ’œCitadel็œŸ้ข˜. Matrix Exponentiationย 
    940. Distinct Subsequences II O(n) O(1) Medium ๐Ÿ’œ๐ŸŽ…ย 
    943. Find the Shortest Superstring O(n^2 * 2^n) O(n^2) Medium ๐ŸŽ…๐ŸŽ…๐ŸŽ… Travelling Salesman Problemย 
    956. Tallest Billboard O(n * 3^(n/2)) O(3^(n/2)) Hard ๐ŸŽ…๐ŸŽ…๐ŸŽ… Knapsnackย 
    960. Delete Columns to Make Sorted III O(n * l^2) O(l) Hard ๐ŸŽ…็ฑปไผผ็š„้ข˜: ย 
    975. Odd Even Jump O(nlogn) O(n) Hard ๐Ÿ’œ๐ŸŽ…๐ŸŽ…๐ŸŽ…, Mono Stack/BST
    983. Minimum Cost For Tickets O(n) O(1) Medium ๐Ÿ’œ๐ŸŽ…๐ŸŽ… Similar Question
    1277. Count Square Submatrices with All Ones O(m*n) O(1) Medium ย ็ฑปไผผ็š„้ข˜:
    1387. Sort Integers by The Power Value O(n) average O(n) Medium nth_element, โœ๏ธโœ๏ธC++ Static Variable Python Static Variableย 
    1388. Pizza With 3n Slices O(n^2) O(n) Hard ๐Ÿ˜๐Ÿ˜ ็ฑปไผผ213. House Robber II ๅ’Œย 188. Best Time to Buy and Sell Stock IV
    1395. Count Number of Teams O(n^2) O(1) Medium ย 
    1411. Number of Ways to Paint N ร— 3 Grid O(logn) O(1) Medium ๐Ÿ˜๐Ÿ˜ Matrix Exponentiationย 
    1420. Build Array Where You Can Find The Maximum Exactly K Comparisons O(n*m*k) O(m*k) Hard ๐ŸŽ…ย 
    ย ย ย ย ย ย ย  ย ย ย  ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย 


    Design

    Title Time Space Difficulty Algorithm Note
    146. LRU Cache O(1) O(k) Medium
    380. Insert Delete GetRandom O(1) O(1) O(1) Medium ๐ŸŽ…๐ŸŽ…
    1381. Design a Stack With Increment Operation ctor: O(1)
    push: O(1)
    pop: O(1)
    increment: O(1) O(n) Medium Lazy increment
    [1396. Design Underground System](1396 Design Underground System) ctor: O(1)
    checkin: O(1)
    checkout: O(1)
    getaverage: O(1) O(n) Medium


    Bash

    Title Time Space Difficulty Algorithm Note
    192 Word Frequency O(n) O(k) Medium switch column awk, remove whitespace sed
    193. Valid Phone Numbers O(n) O(1) Easy grep
    194 Transpose File Shell O(n^2) O(n^2) Medium paste & cut
    195. Tenth Line O(n) O(1) Easy awk, sed

    About

    No description, website, or topics provided.

    Resources

    Stars

    Watchers

    Forks

    Releases

    No releases published

    Packages

    No packages published

    Languages

    • C++ 71.8%
    • Python 27.9%
    • Other 0.3%