Java Algorithm Problems
Java Solutions to problems on LintCode/LeetCode
By awangdev
Java Solutions to problems on LintCode/LeetCode
By awangdev
这个Github已经开启超过五年, 很高兴它可以帮到有需要的人. 信息有价, 知识无价, 每逢闲暇, 我会来维护这个repo, 给刷题的朋友们一些我的想法和见解. 下面来简单介绍一下:
这是一份文字刊物. 那些关于工作的思考与八卦, 总要理性地与人聊一聊.
土汪搬磚記 是一个邮件形式的News Letter, 订阅它, 你将收到我造轮子时选中的零件与感想. 未来, 我会邀请其他公司的大咖我们的News Letter, 给大家带来更多公司的资讯.
我的Youtube Channel未来会更新这些方面的内容:
* 工作经验的分享: 当然会跟Software Engineer比较相关
* 在美国的学生时代的经历
希望在这里参考刷题经验时, 可以去关注我的频道! 搜"土汪/TuwangZ"可以找到我. Youtube: 土汪, Bilibili: 土汪.
有任何程序员工作的疑问, 都可以给我留言/私信/邮件. wechat: TuWangZ, Instagram: TuWang.Z
希望大家学习顺利, 对未来充满希望!
| Leetcode# | Problem | Level | Tags | Time | Space | Language | Sequence |
|:---------:|:------------|:------:|:----:|-----:|------:|:--------:|---------:|
|N/A|Jump Game II.java|Hard|[Array, Coordinate DP, DP, Greedy]|O(n)|O(1)|Java|0|
|N/A|Majority Number II.java|Medium|[Enumeration, Greedy]|||Java|1|
|N/A|Search a 2D Matrix II.java|Medium|[Binary Search, Divide and Conquer]|||Java|2|
|N/A|Missing Ranges.java|Medium|[Array]|||Java|3|
|N/A|Inorder Successor in BST.java|Medium|[BST, Tree]|||Java|4|
|N/A|Convert Integer A to Integer B.java|Easy|[Bit Manipulation]|||Java|5|
|N/A|Backpack VI.java|Medium|[Backpack DP, DP]|||Java|6|
|N/A|Total Occurrence of Target.java|Medium|[]|||Java|7|
|N/A|House Robber III.java|Medium|[DFS, DP, Status DP, Tree]|||Java|8|
|N/A|Binary Tree Maximum Path Sum II.java|Medium|[DFS, Tree]|||Java|9|
|N/A|Backpack V.java|Medium|[Backpack DP, DP]|||Java|10|
|N/A|Closest Number in Sorted Array.java|Easy|[Binary Search]|||Java|11|
|N/A|Convert Expression to Polish Notation.java|Hard|[Binary Tree, DFS, Expression Tree, Stack]|||Java|12|
|N/A|Missing Number.java|Easy|[Array, Bit Manipulation, Math]|||Java|13|
|N/A|Restore IP Addresses.java|Medium|[Backtracking, DFS, String]|||Java|14|
|N/A|Linked List Cycle II.java|Medium|[Linked List, Math, Two Pointers]|||Java|15|
|N/A|Unique Binary Search Tree.java|Medium|[BST, DP, Tree]|||Java|16|
|N/A|Largest Number.java|Medium|[Sort]|||Java|17|
|N/A|Reverse String.java|Easy|[String, Two Pointers]|||Java|18|
|N/A|Triangles.java|Medium|[Array, Coordinate DP, DFS, DP, Memoization]|||Java|19|
|N/A|Frog Jump.java|Hard|[DP, Hash Table]|||Java|20|
|N/A|Summary Ranges.java|Medium|[Array]|||Java|21|
|N/A|Sliding Window Median.java|Hard|[Design, Heap, MaxHeap, MinHeap, Sliding Window]|||Java|22|
|N/A|Single Number III.java|Medium|[Bit Manipulation]|||Java|23|
|N/A|Trailing Zeros.java|Easy|[Math]|||Java|24|
|N/A|Fast Power.java|Medium|[DFS, Divide and Conquer]|||Java|25|
|N/A|Perfect Rectangle.java|Hard|[Design, Geometry, Hash Table]|||Java|26|
|N/A|Total Hamming Distance.java|Medium|[Bit Manipulation]|O(n)|O(1), 32-bit array|Java|27|
|N/A|Word Pattern.java|Easy|[]|||Java|28|
|N/A|Two Sum IV - Input is a BST.java|Easy|[Tree]|||Java|29|
|N/A|Count 1 in Binary.java|Easy|[Bit Manipulation]|||Java|30|
|N/A|Two Lists Sum.java|Medium|[Linked List]|||Java|31|
|N/A|Flatten 2D Vector.java|Medium|[Design]|||Java|32|
|N/A|Hamming Distance.java|Easy|[]|||Java|33|
|N/A|Find the Weak Connected Component in the Directed Graph.java|Medium|[Union Find]|||Java|34|
|N/A|Interval Minimum Number.java|Medium|[Binary Search, Divide and Conquer, Lint, Segment Tree]|||Java|35|
|N/A|Stone Game.java|Medium|[DP]|||Java|36|
|N/A|Longest Increasing Continuous subsequence II.java|Medium|[Array, Coordinate DP, DP, Memoization]|||Java|37|
|N/A|Plus One.java|Easy|[Array, Math]|||Java|38|
|N/A|Paint Fence.java|Easy|[DP, Sequence DP]|O(n)|O(n)|Java|39|
|N/A|Line Reflection.java|Medium|[Hash Table, Math]|O(n)|O(n)|Java|40|
|N/A|Binary Representation.java|Hard|[Bit Manipulation, String]|||Java|41|
|N/A|Longest Consecutive Sequence.java|Hard|[Array, Hash Table, Union Find]|||Java|42|
|N/A|Find Minimum in Rotated Sorted Array.java|Medium|[Array, Binary Search]|||Java|43|
|N/A|Binary Tree Longest Consecutive Sequence II.java|Medium|[DFS, Divide and Conquer, Double Recursive, Tree]|||Java|44|
|N/A|Minimum Subarray.java|Easy|[Array, DP, Greedy, Sequence DP, Subarray]|O(m)|O(1)|Java|45|
|N/A|Connecting Graph.java|Medium|[Union Find]|||Java|46|
|N/A|Count of Smaller Number.java|Medium|[Binary Search, Lint, Segment Tree]|||Java|47|
|N/A|Binary Gap.java|Easy|[Bit Manipulation]|O(n), n = # of bits|O(1)|Java|48|
|N/A|Flip Game II.java|Medium|[Backtracking, DFS, DP]|||Java|49|
|N/A|Subtree of Another Tree.java|Easy|[DFS, Divide and Conquer, Tree]|||Java|50|
|N/A|Binary Tree Level Order Traversal II.java|Medium|[BFS, Tree]|||Java|51|
|N/A|Maximum Average Subarray I.java|Easy|[Array, Subarray]|O(n)|O(1)|Java|52|
|N/A|IndexMatch.java|Easy|[]|||Java|53|
|N/A|Walls and Gates.java|Medium|[BFS, DFS]|||Java|54|
|N/A|Decode String.java|Medium|[DFS, Divide and Conquer, Stack]|||Java|55|
|N/A|The Maze.java|Medium|[BFS, DFS]|||Java|56|
|N/A|Palindromic Substrings.java|Medium|[DP, String]|||Java|57|
|N/A|Rearrange String k Distance Apart.java|Hard|[Greedy, Hash Table, Heap]|||Java|58|
|N/A|Count and Say.java|Easy|[Basic Implementation, String]|||Java|59|
|N/A|Median of Two Sorted Arrays.java|Hard|[Array, Binary Search, DFS, Divide and Conquer]|||Java|60|
|N/A|Perfect Squares.java|Medium|[BFS, DP, Math, Partition DP]|||Java|61|
|N/A|Word Search.java|Medium|[Array, Backtracking, DFS]|||Java|62|
|N/A|Backpack II.java|Medium|[Backpack DP, DP]|||Java|63|
|N/A|Reshape the Matrix.java|Easy|[]|||Java|64|
|N/A|Update Bits.java|Medium|[Bit Manipulation]|||Java|65|
|N/A|Triangle Count.java|Medium|[Array]|||Java|66|
|N/A|Remove Duplicate Letters.java|Hard|[Greedy, Hash Table, Stack]|||Java|67|
|N/A|Permutation Sequence.java|Medium|[Backtracking, Math]|||Java|68|
|N/A|House Robber II.java|Medium|[DP, Sequence DP, Status DP]|||Java|69|
|N/A|O(1) Check Power of 2.java|Easy|[Bit Manipulation]|||Java|70|
|N/A|Letter Combinations of a Phone Number.java|Medium|[Backtracking, String]|||Java|71|
|N/A|Backspace String Compare.java|Easy|[Stack, Two Pointers]|||Java|72|
|N/A|Minimum Size Subarray Sum.java|Medium|[Array, Binary Search, Subarray, Two Pointers]|O(n)|O(1)|Java|73|
|N/A|Implement Stack using Queues.java|Easy|[Design, Stack]|||Java|74|
|N/A|Minimum Absolute Difference in BST.java|Easy|[BST]|||Java|75|
|N/A|Maximum Binary Tree.java|Medium|[Stack, Tree]|||Java|76|
|N/A|ColorGrid.java|Medium|[Design, Hash Table]|||Java|77|
|N/A|HashWithArray.java|Easy|[]|||Java|78|
|N/A|Flood Fill.java|Easy|[DFS]|||Java|79|
|N/A|Construct Binary Tree from Inorder and Postorder Traversal.java|Medium|[Array, DFS, Divide and Conquer, Tree]|||Java|80|
|N/A|Backpack.java|Medium|[Backpack DP, DP]|||Java|81|
|N/A|Longest Common Subsequence.java|Medium|[DP, Double Sequence DP, Sequence DP]|||Java|82|
|N/A|Peeking Iterator.java|Medium|[Design]|||Java|83|
|N/A|Orderly Queue.java|Hard|[Math, String]|||Java|84|
|N/A|QuickSort.java|Medium|[Quick Sort, Sort]|||Java|85|
|N/A|Maximal Rectangle.java|Hard|[Array, DP, Hash Table, Stack]|||Java|86|
|N/A|Expression Evaluation.java|Hard|[Binary Tree, DFS, Expression Tree, Minimum Binary Tree, Stack]|||Java|87|
|N/A|Subtree.java|Easy|[DFS, Tree]|||Java|88|
|N/A|LFU Cache.java|Hard|[Design, Hash Table]|||Java|89|
|N/A|Cosine Similarity.java|Easy|[Basic Implementation]|||Java|90|
|N/A|Scramble String.java|Hard|[DP, Interval DP, String]|||Java|91|
|N/A|Redundant Connection.java|Medium|[BFS, DFS, Graph, Tree, Union Find]|||Java|92|
|N/A|Rotate List.java|Medium|[Linked List, Two Pointers]|||Java|93|
|N/A|Swap Nodes in Pairs.java|Medium|[Linked List]|||Java|94|
|N/A|Longest Increasing Continuous subsequence.java|Easy|[Array, Coordinate DP, DP]|||Java|95|
|N/A|K Edit Distance.java|Hard|[DP, Double Sequence DP, Sequence DP, Trie]|||Java|96|
|N/A|Combinations.java|Medium|[Backtracking, Combination, DFS]|||Java|97|
|N/A|Max Area of Island.java|Easy|[Array, DFS]|||Java|98|
|N/A|Sort List.java|Medium|[Divide and Conquer, Linked List, Merge Sort, Sort]|||Java|99|
|N/A|Find Peak Element.java|Medium|[Array, Binary Search]|||Java|100|
|N/A|Word Search II.java|Hard|[Backtracking, DFS, Trie]|||Java|101|
|N/A|K Empty Slots.java|Hard|[Array, BST, TreeSet]|||Java|102|
|N/A|Gray Code.java|Medium|[Backtracking]|||Java|103|
|N/A|Encode and Decode TinyURL.java|Medium|[Hash Table, Math]|||Java|104|
|N/A|Game of Life.java|Medium|[Array]|||Java|105|
|N/A|Compare Version Numbers.java|Medium|[String]|||Java|106|
|N/A|Singleton.java|Easy|[Design]|||Java|107|
|N/A|Ugly Number.java|Medium|[Math]|||Java|108|
|N/A|Russian Doll Envelopes.java|Hard|[Binary Search, Coordinate DP, DP]|||Java|109|
|N/A|Rehashing.java|Medium|[Hash Table]|||Java|110|
|N/A|Kth Smallest Sum In Two Sorted Arrays.java|Hard|[]|||Java|111|
|N/A|Longest Common Substring.java|Medium|[DP, Double Sequence DP, Sequence DP, String]|||Java|112|
|N/A|Rotate Image.java|Medium|[Array, Enumeration]|||Java|113|
|N/A|Backpack III.java|Hard|[Backpack DP, DP]|||Java|114|
|N/A|Combination Sum IV.java|Medium|[Array, Backpack DP, DP]|||Java|115|
|N/A|Number of Longest Increasing Subsequence.java|Medium|[Coordinate DP, DP]|O(n^2)||Java|116|
|N/A|Permutation Index.java|Easy|[]|||Java|117|
|N/A|4Sum.java|Medium|[Hash Table]|||Java|118|
|N/A|Shortest Palindrome.java|Hard|[KMP, String]|||Java|119|
|N/A|Convert Sorted Array to Binary Search Tree.java|Easy|[DFS, Divide and Conquer, Tree]|||Java|120|
|N/A|Populating Next Right Pointers in Each Node.java|Medium|[DFS, Divide and Conquer, Tree]|||Java|121|
|N/A|Space Replacement.java|Medium|[String]|||Java|122|
|N/A|Contiguous Array.java|Medium|[Hash Table]|||Java|123|
|N/A|Reverse Linked List II .java|Medium|[Linked List]|||Java|124|
|N/A|Palindrome Pairs.java|Hard|[Hash Table, String, Trie]|||Java|125|
|N/A|Find Peak Element II.java|Hard|[Binary Search, DFS, Divide and Conquer]|||Java|126|
|N/A|Minimum Height Trees.java|Medium|[BFS, Graph]|||Java|127|
|N/A|Longest Substring Without Repeating Characters.java|Medium|[Hash Table, String, Two Pointers]|||Java|128|
|N/A|Fraction to Recurring Decimal.java|Medium|[Hash Table, Math]|||Java|129|
|N/A|Wiggle Sort.java|Medium|[Array, Sort]|||Java|130|
|N/A|Reverse Words in a String II.java|Medium|[String]|||Java|131|
|N/A|Remove Node in Binary Search Tree.java|Hard|[BST]|||Java|132|
|N/A|Reorder List.java|Medium|[Linked List]|||Java|133|
|N/A|Redundant Connection II.java|Hard|[DFS, Graph, Tree, Union Find]|||Java|134|
|N/A|[tool] Quick Select - Median.java|Easy|[Array, Lint, Quick Select, Quick Sort, Two Pointers]|O(n)|O(logN)|Java|135|
|N/A|Swap Bits.java|Easy|[Bit Manipulation]|||Java|136|
|N/A|Friends Of Appropriate Ages.java|Medium|[Array, Math]|||Java|137|
|N/A|Longest Increasing Subsequence.java|Medium|[Binary Search, Coordinate DP, DP, Memoization]|O(n^2) dp, O(nLogN) binary search|O(n)|Java|138|
|N/A|Power of Two.java|Easy|[Bit Manipulation, Math]|||Java|139|
|N/A|Min Stack.java|Easy|[Design, Stack]|||Java|140|
|N/A|Count of Smaller Number before itself.java|Hard|[]|||Java|141|
|N/A|Majority Number III.java|Medium|[Hash Table, Linked List]|||Java|142|
|N/A|Number of Digit One.java|Hard|[Math]|||Java|143|
|N/A|Tweaked Identical Binary Tree.java|Easy|[DFS, Tree]|||Java|144|
|N/A|Search Range in Binary Search Tree .java|Medium|[BST, Binary Tree]|||Java|145|
|N/A|Best Time to Buy and Sell Stock III.java|Hard|[Array, DP, Sequence DP]|||Java|146|
|N/A|Design Search Autocomplete System.java|Hard|[Design, Hash Table, MinHeap, PriorityQueue, Trie]|input: O(x), where x = possible words, constructor: O(mn) m = max length, n = # of words|O(n^2), n = # of possible words, n = # of trie levels; mainlay saving the Map<S, freq>
|Java|147|
|N/A|Subsets II.java|Medium|[Array, BFS, Backtracking, DFS]|O(2^n)||Java|148|
|N/A|One Edit Distance.java|Medium|[String]|||Java|149|
|N/A|Segment Tree Modify.java|Medium|[Binary Tree, DFS, Divide and Conquer, Lint, Segment Tree]|||Java|150|
|N/A|Distinct Subsequences.java|Hard|[DP, String]|||Java|151|
|N/A|Insert Node in a Binary Search Tree .java|Easy|[BST]|||Java|152|
|N/A|Container With Most Water.java|Medium|[Array, Two Pointers]|||Java|153|
|N/A|Word Ladder.java|Medium|[BFS]|||Java|154|
|N/A|Single Number II.java|Medium|[Bit Manipulation]|||Java|155|
|N/A|Heaters.java|Easy|[]|||Java|156|
|N/A|Kth Smallest Element in a BST.java|Medium|[BST, DFS, Stack, Tree]|||Java|157|
|N/A|Robot Room Cleaner.java|Hard|[Backtracking, DFS]|||Java|158|
|N/A|Coins in a Line II.java|Medium|[Array, DP, Game Theory, Memoization, MiniMax]|||Java|159|
|N/A|Partition List.java|Medium|[Linked List, Two Pointers]|||Java|160|
|N/A|Classical Binary Search.java|Easy|[Binary Search]|||Java|161|
|N/A|Wood Cut.java|Medium|[Binary Search]|||Java|162|
|N/A|Connecting Graph III.java|Medium|[Union Find]|||Java|163|
|N/A|Invert Binary Tree.java|Easy|[BFS, DFS, Tree]|||Java|164|
|N/A|Remove Duplicates from Unsorted List.java|Medium|[Linked List]|||Java|165|
|N/A|Maximum Size Subarray Sum Equals k.java|Medium|[Hash Table, PreSum, Subarray]|O(n)|O(n)|Java|166|
|N/A|The Smallest Difference.java|Medium|[Array, Sort, Two Pointers]|||Java|167|
|N/A|Unique Binary Search Tree II.java|Medium|[BST, DP, Divide and Conquer, Tree]|||Java|168|
|N/A|Encode and Decode Strings.java|Medium|[String]|||Java|169|
|N/A|Remove Duplicates from Sorted List II.java|Medium|[Linked List]|||Java|170|
|N/A|Subarray Sum II.java|Hard|[Array, Binary Search, Two Pointers]|||Java|171|
|N/A|Matrix Zigzag Traversal.java|Easy|[]|||Java|172|
|N/A|Ones and Zeroes.java|Hard|[DP]|||Java|173|
|N/A|Number of Connected Components in an Undirected Graph.java|Medium|[BFS, DFS, Graph, Union Find]|||Java|174|
|N/A|Submatrix Sum.java|Medium|[Array, Hash Table, PreSum]|||Java|175|
|N/A|Zigzag Iterator.java|Medium|[BST]|||Java|176|
|N/A|Find the Connected Component in the Undirected Graph.java|Medium|[BFS, DFS]|||Java|177|
|N/A|Implement Stack.java|Easy|[Stack]|||Java|178|
|N/A|Number of Airplane in the sky.java|Medium|[Array, Interval, PriorityQueue, Sort, Sweep Line]|||Java|179|
|N/A|Surrounded Regions.java|Medium|[BFS, DFS, Matrix DFS, Union Find]|||Java|180|
|N/A|Wildcard Matching.java|Hard|[Backtracking, DP, Double Sequence DP, Greedy, Sequence DP, String]|||Java|181|
|N/A|Expression Add Operators.java|Hard|[Backtracking, DFS, Divide and Conquer, String]|O(4^n)|O(4^n)|Java|182|
|N/A|Cracking the Safe.java|Hard|[DFS, Greedy, Math]|||Java|183|
|N/A|Unique Word Abbreviation.java|Medium|[Design, Hash Table]|||Java|184|
|N/A|Best Time to Buy and Sell Stock IV.java|Hard|[DP, Sequence DP]|||Java|185|
|N/A|Find Minimum in Rotated Sorted Array II.java|Hard|[Array, Binary Search]|||Java|186|
|N/A|Longest Valid Parentheses.java|Hard|[Coordinate DP, Stack, String]|||Java|187|
|N/A|Ugly Number II.java|Medium|[DP, Enumeration, Heap, Math, PriorityQueue]|O(n)|O(n)|Java|188|
|N/A|Add Two Numbers II.java|Medium|[Linked List]|||Java|189|
|N/A|Maximum Average Subarray II.java|Review|[Array, Binary Search, PreSum]|||Java|190|
|N/A|Expression Tree Build.java|Hard|[Binary Tree, Expression Tree, Minimum Binary Tree, Stack]|||Java|191|
|N/A|Merge Two Binary Trees.java|Easy|[DFS, Tree]|||Java|192|
|N/A|Copy Books.java|Hard|[Binary Search, DP, Partition DP]|||Java|193|
|N/A|Power of Three.java|Easy|[Math]|||Java|194|
|N/A|Sort Colors II.java|Medium|[Partition, Quick Sort, Sort, Two Pointers]|||Java|195|
|N/A|Maximum Subarray III.java|Review|[]|||Java|196|
|N/A|Path Sum II.java|Easy|[Backtracking, DFS, Tree]|||Java|197|
|N/A|Segment Tree Query II.java|Medium|[Binary Tree, DFS, Divide and Conquer, Lint, Segment Tree]|||Java|198|
|N/A|Shortest Distance from All Buildings.java|Hard|[BFS]|||Java|199|
|N/A|Brick Wall.java|Medium|[Hash Table]|O(mn)|O(X), X = max wall width|Java|200|
|N/A|Longest Increasing Path in a Matrix.java|Hard|[Coordinate DP, DFS, DP, Memoization, Topological Sort]|||Java|201|
|N/A|Interleaving String.java|Hard|[DP, String]|||Java|202|
|N/A|Shuffle an Array.java|Medium|[Permutation]|||Java|203|
|N/A|Recover Binary Search Tree.java|Hard|[BST, DFS, Tree]|||Java|204|
|N/A|My Calendar I.java|Medium|[Array, TreeMap]|||Java|205|
|N/A|Evaluate Reverse Polish Notation.java|Medium|[Stack]|O(n)|O(n)|Java|206|
|N/A|Counting Bits.java|Medium|[Bit Manipulation, Bitwise DP, DP]|||Java|207|
|N/A|Sort Letters by Case.java|Medium|[Partition, Sort, String, Two Pointers]|||Java|208|
|N/A|Two Strings Are Anagrams.java|Easy|[]|||Java|209|
|N/A|Two Sum II - Input array is sorted.java|Medium|[Array, Binary Search, Two Pointers]|||Java|210|
|N/A|[HackerRank]. Change to Anagram.java|Easy|[String]|||Java|211|
|N/A|Implement Queue using Stacks.java|Easy|[Design, Stack]|||Java|212|
|N/A|Basic Calculator.java|Hard|[Binary Tree, Expression Tree, Math, Minimum Binary Tree, Stack]|||Java|213|
|N/A|Word Squares.java|Hard|[Backtracking, Trie]|||Java|214|
|N/A|Insertion Sort List.java|Medium|[Linked List, Sort]|||Java|215|
|N/A|Interval Sum.java|Medium|[Binary Search, Lint, Segment Tree]|||Java|216|
|N/A|Strobogrammatic Number II.java|Medium|[DFS, Enumeration, Math, Sequence DFS]|||Java|217|
|N/A|The Maze II.java|Medium|[BFS, DFS, PriorityQueue]|||Java|218|
|N/A|k Sum.java|Hard|[DP]|||Java|219|
|N/A|Coins in a Line III.java|Hard|[Array, DP, Game Theory, Interval DP, Memoization]|||Java|220|
|N/A|Convert Sorted List to Binary Search Tree.java|Medium|[BST, DFS, Divide and Conquer, Linked List]|||Java|221|
|N/A|Guess Number Higher or Lower.java|Easy|[Binary Search]|||Java|222|
|N/A|Trapping Rain Water II.java|Hard|[BFS, Heap, MinHeap, PriorityQueue]|||Java|223|
|N/A|Bricks Falling When Hit.java|Hard|[Union Find]|||Java|224|
|N/A|Subarray Sum Closest.java|Medium|[PreSum, PriorityQueue, Sort, Subarray]|O(nlogn)|O(n)|Java|225|
|N/A|Burst Balloons.java|Hard|[DP, Divide and Conquer, Interval DP, Memoization]|||Java|226|
|N/A|Partition Array by Odd and Even.java|Easy|[Array, Two Pointers]|||Java|227|
|N/A|Best Time to Buy and Sell Stock with Cooldown.java|Medium|[DP]|||Java|228|
|N/A|Palindrome Partitioning II.java|Hard|[DP, Partition DP]|||Java|229|
|N/A|Convert Binary Search Tree to Sorted Doubly Linked List (extra space).java|Medium|[Linked List, Stack, Tree]|O(n)|O(n)|Java|230|
|N/A|Kth Largest Element in an Array.java|Medium|[Divide and Conquer, Heap, MinHeap, PriorityQueue, Quick Sort]|||Java|231|
|N/A|Sliding Puzzle.java|Hard|[BFS, Graph]|||Java|232|
|N/A|Interval Sum II.java|Hard|[Binary Search, Lint, Segment Tree]|||Java|233|
|N/A|Add Digits.java|Easy|[Math]|||Java|234|
|N/A|HashWithCustomizedClass(LinkedList).java|Medium|[Hash Table]|||Java|235|
|N/A|Maximum Vacation Days.java|Hard|[DP]|||Java|236|
|N/A|Smallest Subtree with all the Deepest Nodes.java|Medium|[DFS, Divide and Conquer, Tree]|O(n)|O(n)|Java|237|
|N/A|Kth Smallest Element in a Sorted Matrix.java|Medium|[Binary Search, Heap]|O(n + klogn)|O(n)|Java|238|
|N/A|Combination Sum III.java|Medium|[Array, Backtracking, Combination, DFS]|||Java|239|
|N/A|Last Position of Target.java|Easy|[Binary Search]|||Java|240|
|N/A|Path Sum III.java|Easy|[DFS, Double Recursive, Tree]|||Java|241|
|N/A|Convert Expression to Reverse Polish Notation.java|Hard|[Binary Tree, DFS, Expression Tree, Stack]|||Java|242|
|N/A|Complete Binary Tree.java|Easy|[BFS, Tree]|||Java|243|
|N/A|Best Time to Buy and Sell Stock with Transaction Fee.java|Medium|[Array, DP, Greedy, Sequence DP, Status DP]|O(n)|O(n), O(1) rolling array|Java|244|
|N/A|Pow(x, n).java|Medium|[Binary Search, Math]|||Java|245|
|N/A|Maximum Subarray II.java|Medium|[Array, DP, Greedy, PreSum, Sequence DP, Subarray]|||Java|246|
|N/A|Sort Colors.java|Medium|[Array, Partition, Quick Sort, Sort, Two Pointers]|||Java|247|
|N/A|Word Ladder II.java|Hard|[Array, BFS, Backtracking, DFS, Hash Table, String]|||Java|248|
|N/A|Sum of Two Integers.java|Easy|[Bit Manipulation]|||Java|249|
|N/A|Predict the Winner.java|Medium|[DP, MiniMax]|||Java|250|
|N/A|Connecting Graph II.java|Medium|[Union Find]|||Java|251|
|N/A|Search Insert Position.java|Easy|[]|||Java|252|
|N/A|Longest Univalue Path.java|Easy|[]|||Java|253|
|N/A|Contains Duplicate III.java|Medium|[BST]|||Java|254|
|N/A|Spiral Matrix.java|Medium|[Array, Enumeration]|||Java|255|
|N/A|Next Closest Time.java|Medium|[Basic Implementation, Enumeration, String]|||Java|256|
|N/A|Group Shifted Strings.java|Medium|[Hash Table, String]|||Java|257|
|N/A|The Maze III.java|Hard|[BFS, DFS, PriorityQueue]|||Java|258|
|N/A|Coins in a Line.java|Medium|[DP, Game Theory, Greedy]|||Java|259|
|N/A|Binary Tree Longest Consecutive Sequence.java|Medium|[DFS, Divide and Conquer, Tree]|||Java|260|
|N/A|The Spiral Matrix II.java|Medium|[Array]|||Java|261|
|N/A|Trim a Binary Search Tree.java|Easy|[BST, Tree]|||Java|262|
|N/A|Number Of Corner Rectangles.java|Medium|[DP, Math]|||Java|263|
|N/A|Queue Reconstruction by Height.java|Medium|[Greedy]|||Java|264|
|N/A|Minimum Swaps To Make Sequences Increasing.java|Medium|[Coordinate DP, DP, Status DP]|||Java|265|
|N/A|Interleaving Positive and Negative Numbers.java|Medium|[Two Pointers]|||Java|266|
|N/A|Path Sum IV.java|Medium|[DFS, Hash Table, Tree]|||Java|267|
|N/A|Excel Sheet Column Number.java|Easy|[Math]|||Java|268|
|N/A|Target Sum.java|Medium|[DFS, DP]|||Java|269|
|N/A|Partition Array.java|Medium|[Array, Quick Sort, Sort, Two Pointers]|||Java|270|
|N/A|Bus Routes.java|Hard|[BFS]|||Java|271|
|N/A|Max Sum of Rectangle No Larger Than K.java|Hard|[Array, BST, Binary Search, DP, Queue, TreeSet]|||Java|272|
|N/A|String Permutation.java|Easy|[]|||Java|273|
|N/A|Maximum XOR of Two Numbers in an Array.java|Medium|[Bit Manipulation, Trie]|||Java|274|
|N/A|Search for a Range.java|Medium|[Array, Binary Search]|||Java|275|
|N/A|Palindrome Permutation II.java|Medium|[Backtracking, Permutation]|||Java|276|
|N/A|Populating Next Right Pointers in Each Node II.java|Medium|[DFS, Tree]|O(n)|O(1)|Java|277|
|N/A|Nim Game.java|Easy|[Brainteaser, DP, Game Theory]|||Java|278|
|N/A|Search a 2D Matrix.java|Medium|[Array, Binary Search]|||Java|279|
|N/A|Largest Rectangle in Histogram.java|Hard|[Array, Monotonous Stack, Stack]|||Java|280|
|[lint]|[lint]. Merge k Sorted Arrays.java|Medium|[Heap, MinHeap, PriorityQueue]|O(nlogk)|O(k)|Java|281|
|[lint]|[lint]. Segment Tree Build II.java|Medium|[Binary Tree, Divide and Conquer, Lint, Segment Tree]|||Java|282|
|[lint]|[lint]. Nth to Last Node in List.java|Easy|[Linked List, Lint]|||Java|283|
|[lint]|[lint]. Product of Array Exclude Itself.java|Medium|[Array, Lint]|||Java|284|
|[lint]|[lint]. Compare Strings.java|Easy|[Lint, String]|||Java|285|
|[lint]|[lint]. Segment Tree Query.java|Medium|[Binary Tree, DFS, Divide and Conquer, Lint, Segment Tree]|||Java|286|
|[lint]|[lint]. HashHeap.java|Hard|[HashHeap, Heap, Lint]|||Java|287|
|[lint]|[lint]. Longest Words.java|Easy|[Hash Table, Lint, String]|||Java|288|
|[lint]|[lint]. Anagrams.java|Medium|[Array, Hash Table, Lint]|O(n)|O(n)|Java|289|
|[lint]|[lint]. 3 Sum Closest.java|Medium|[Array, Lint, Two Pointers]|||Java|290|
|[lint]|[lint]. Unique Characters.java|Easy|[Array, Lint, String]|||Java|291|
|[lint]|[lint]. Lowest Common Ancestor II.java|Easy|[Hash Table, Lint, Tree]|||Java|292|
|[lint]|[lint]. Heapify.java|Medium|[HashHeap, Heap, Lint, MinHeap]|||Java|293|
|[lint]|[lint]. Subarray Sum.java|Easy|[Array, Hash Table, Lint, PreSum, Subarray]|O(n)|O(n)|Java|294|
|[lint]|[lint]. Recover Rotated Sorted Array.java|Easy|[Array, Lint]|||Java|295|
|[lint]|[lint]. 2 Sum II.java|Medium|[Array, Binary Search, Lint, Two Pointers]|||Java|296|
|[lint]|[lint]. Segment Tree Build.java|Medium|[Binary Tree, Divide and Conquer, Lint, Segment Tree]|||Java|297|
|[tool]|[tool]. MergeSort.java|Medium|[Lint, Merge Sort, Sort]|O(mlogn)|O(n)|Java|298|
|[tool]|[tool]. Hash Function.java|Easy|[Hash Table, Lint]|O(1) get|O(n) store map|Java|299|
|[tool]|[tool]. UnionFind.java|Medium|[Lint, Union Find]|O(n), with Path Compression O(mN), with Union by Rank O(logN)|O(n)|Java|300|
|[tool]|[tool]. Topological Sorting.java|Medium|[BFS, DFS, Lint, Topological Sort]|O(V + E)|O(V + E)|Java|301|
|36|36. Valid Sudoku.java|Easy|[Enumeration, Hash Table]|(mn)|(mn)|Java|302|
|359|359. Logger Rate Limiter.java|Easy|[Design, Hash Table]|O(1)|O(n)|Java|303|
|198|198. House Robber.java|Easy|[DP, Sequence DP, Status DP]|O(n)|O(n) or rolling array O(1)|Java|304|
|21|21. Merge Two Sorted Lists.java|Easy|[Linked List]|O(n)|O(1)|Java|305|
|102|102. Binary Tree Level Order Traversal.java|Medium|[BFS, DFS, Tree]|O(n)|O(n)|Java|306|
|788|788. Rotated Digits.java|Easy|[Basic Implementation, String]|O(n)|O(n)|Java|307|
|42|42. Trapping Rain Water.java|Hard|[Array, Stack, Two Pointers]|O(n)|O(1)|Java|308|
|347|347. Top K Frequent Elements.java|Medium|[Hash Table, Heap, MaxHeap, MinHeap, PriorityQueue]|O(n)|O(n)|Java|309|
|269|269. Alien Dictionary.java|Hard|[BFS, Backtracking, DFS, Graph, Topological Sort]|O(n), n = # of graph edges|O(n)|Java|310|
|237|237. Delete Node in a Linked List.java|Easy|[Linked List]|||Java|311|
|142|142. Linked List Cycle II.java|Medium|[Cycle Detection, Linked List, Slow Fast Pointer, Two Pointers]|O(n)|O(1)|Java|312|
|448|448. Find All Numbers Disappeared in an Array.java|Easy|[Array, Bucket Sort]|O(n)|O(1)|Java|313|
|360|360. Sort Transformed Array.java|Medium|[Math, Two Pointers]|O(n)|O(n) store result|Java|314|
|22|22. Generate Parentheses.java|Medium|[Backtracking, DFS, Sequence DFS, String]|O(2^n)|O(2^n)|Java|315|
|849|849. Maximize Distance to Closest Person.java|Easy|[Array, Basic Implementation, Two Pointers]|O(n)|O(1)|Java|316|
|408|408. Valid Word Abbreviation.java|Easy|[Basic Implementation, String]|||Java|317|
|415|415. Add Strings.java|Easy|[Basic Implementation, Math, String]|O(n)|O(n)|Java|318|
|83|83. Remove Duplicates from Sorted List.java|Easy|[Linked List]|||Java|319|
|1108|1108. Defanging an IP Address.java|Easy|[Basic Implementation, String]|||Java|320|
|1021|1021. Remove Outermost Parentheses.java|Easy|[Stack]|||Java|321|
|236|236. Lowest Common Ancestor of a Binary Tree.java|Medium|[DFS, Tree]|O(n)|O(n)|Java|322|
|766|766. Toeplitz Matrix.java|Easy|[Array]|O(mn)|O(1)|Java|323|
|953|953. Verifying an Alien Dictionary.java|Easy|[Hash Table]|O(nm)|O(1)|Java|324|
|1053|1053. Previous Permutation With One Swap.java|Medium|[Array, Greedy, Permutation]|O(n)|O(1)|Java|325|
|1213|1213. Intersection of Three Sorted Arrays.java|Easy|[Hash Table, Two Pointers]|O(m + n + h) two pointers approach|O(1)|Java|326|
|383|383. Ransom Note.java|Easy|[Basic Implementation, String]|||Java|327|
|56|56. Merge Intervals.java|Medium|[Array, PriorityQueue, Sort, Sweep Line]|O(nlogn)|O(n)|Java|328|
|252|252. Meeting Rooms.java|Easy|[PriorityQueue, Sort, Sweep Line]|O(nlogn)|O(1)|Java|329|
|665|665. Non-decreasing Array.java|Easy|[Array]|O(n)|O(1)|Java|330|
|843|843. Guess the Word.java|Hard|[MiniMax]|TODO|TODO|Java|331|
|986|986. Interval List Intersections.java|Medium|[Two Pointers]|O(n)|O(1)|Java|332|
|76|76. Minimum Window Substring.java|Hard|[Hash Table, Sliding Window, String, Two Pointers]|O(n)|O(1)|Java|333|
|293|293. Flip Game.java|Easy|[String]|||Java|334|
|244|244. Shortest Word Distance II.java|Medium|[Array, Design, Hash Table, Two Pointers]|O(n) to build map, O(a + b) to query|O(n)|Java|335|
|686|686. Repeated String Match.java|Easy|[Basic Implementation, Edge Case, String]|||Java|336|
|80|80.Remove Duplicates from Sorted Array II.java|Medium|[Array, Two Pointers]|||Java|337|
|301|301. Remove Invalid Parentheses.java|Hard|[BFS, DFS, DP]|||Java|338|
|111|111. Minimum Depth of Binary Tree.java|Easy|[BFS, DFS, Tree]|O(n)|O(n)|Java|339|
|1216|1216. Valid Palindrome III.java|Hard|[DFS, DP, Memoization, String]|O(n^2)|O(n^2)|Java|340|
|7|7. Reverse Integer.java|Easy|[Math]|O(n)|O(1)|Java|341|
|5|5. Longest Palindromic Substring.java|Medium|[DP, String]|O(n^2)|O(n^2)|Java|342|
|303|303. Range Sum Query - Immutable.java|Easy|[DP, PreSum]|O(1) query, O(n) setup|O(n)|Java|343|
|674|674. Longest Continuous Increasing Subsequence.java|Easy|[Array, Coordinate DP, DP, Sliding Window]|O(n)|O(1)|Java|344|
|1007|1007. Minimum Domino Rotations For Equal Row.java|Medium|[Array, Greedy]|O(n)|O(1)|Java|345|
|485|485. Max Consecutive Ones.java|Easy|[Array, Basic Implementation]|O(n)|O(1)|Java|346|
|896|896. Monotonic Array.java|Easy|[Array]|||Java|347|
|207|207. Course Schedule.java|Medium|[BFS, Backtracking, DFS, Graph, Topological Sort]|O(n)|O(n)|Java|348|
|327|327. Count of Range Sum.java|Hard|[BIT, Divide and Conquer, Merge Sort, PreSum, Segment Tree]|O(nlogn)|O(n)|Java|349|
|987|987. Vertical Order Traversal of a Binary Tree.java|Medium|[BFS, Binary Tree, DFS, Hash Table, Tree]|||Java|350|
|26|26.Remove Duplicates from Sorted Array.java|Easy|[Array, Two Pointers]|||Java|351|
|429|429. N-ary Tree Level Order Traversal.java|Medium|[BFS, Tree]|O(n)|O(n)|Java|352|
|275|275. H-Index II.java|Medium|[Binary Search]|O(logN)|O(1) extra|Java|353|
|204|204. Count Primes.java|Easy|[Hash Table, Math]|||Java|354|
|58|58. Length of Last Word.java|Easy|[String]|||Java|355|
|496|496. Next Greater Element I.java|Easy|[Hash Table, Stack]|O(n)|O(n)|Java|356|
|41|41. First Missing Positive.java|Hard|[Analysis, Array, Edge Case]|O(n)|O(1)|Java|357|
|694|694. Number of Distinct Islands.java|Medium|[DFS, Hash Table]|O(n)|O(n)|Java|358|
|717|717. 1-bit and 2-bit Characters.java|Easy|[Array]|||Java|359|
|53|53. Maximum Subarray.java|Easy|[Array, DFS, DP, Divide and Conquer, PreSum, Sequence DP, Subarray]|O(n)|O(n), O(1) rolling array|Java|360|
|152|152. Maximum Product Subarray.java|Medium|[Array, DP, PreProduct, Subarray]|O(n)|O(1)|Java|361|
|199|199. Binary Tree Right Side View.java|Medium|[BFS, DFS, Tree]|O(n)|O(n)|Java|362|
|259|259. 3Sum Smaller.java|Medium|[Array, Sort, Two Pointers]|||Java|363|
|977|977. Squares of a Sorted Array.java|Easy|[Array, Two Pointers]|O(n)|O(n)|Java|364|
|824|824. Goat Latin.java|Easy|[Basic Implementation, String]|O(n)|O(1)|Java|365|
|308|308. Range Sum Query 2D - Mutable.java|Hard|[Binary Indexed Tree, Segment Tree]|build(n), update(logn), rangeRuery(logn + k)|O(n)|Java|366|
|1203|1203. Sort Items by Groups Respecting Dependencies.java|Hard|[BFS, DFS, Graph, Topological Sort]|O(V + E) to traverse the graph, #nodes + #edges|O(V + E)|Java|367|
|1153|1153. String Transforms Into Another String.java|Hard|[Graph]|O(n)|O(n)|Java|368|
|1008|1008. Construct Binary Search Tree from Preorder Traversal.java|Medium|[DFS, Tree]|O(n)|O(n)|Java|369|
|151|151. Reverse Words in a String.java|Medium|[String]|O(n)||Java|370|
|855|855. Exam Room.java|Medium|[PriorityQueue, Sort, TreeMap, TreeSet]|O(logn)|O(n)|Java|371|
|31|31. Next Permutation.java|Medium|[Array, Permutation]|O(n)|O(1)|Java|372|
|518|518. Coin Change 2.java|Medium|[Backpack DP, DP]|O(n)|O(n)|Java|373|
|405|405. Convert a Number to Hexadecimal.java|Easy|[Bit Manipulation]|||Java|374|
|850|850. Rectangle Area II.java|Hard|[Segment Tree, Sweep Line]|O(n^2)|O(n)|Java|375|
|515|515. Find Largest Value in Each Tree Row.java|Medium|[BFS, DFS, Tree]|O(n)|O(n)|Java|376|
|253|253. Meeting Rooms II.java|Medium|[Greedy, Heap, PriorityQueue, Sort, Sweep Line]|O(nlogn)|O(n)|Java|377|
|1161|1161. Maximum Level Sum of a Binary Tree.java|Medium|[BFS, DFS, Graph]|O(n) visit all nodes|O(n)|Java|378|
|509|509. Fibonacci Number.java|Easy|[DP, Math, Memoization]|||Java|379|
|221|221. Maximal Square.java|Medium|[Coordinate DP, DP]|O(mn)|O(mn)|Java|380|
|131|131. Palindrome Partitioning.java|Medium|[Backtracking, DFS]|O(2^n)|O(n^2)|Java|381|
|136|136. Single Number.java|Easy|[Bit Manipulation, Hash Table]|||Java|382|
|222|222. Count Complete Tree Nodes.java|Medium|[Binary Search, DFS, Tree]|O(n)|O(h)|Java|383|
|257|257. Binary Tree Paths.java|Easy|[Backtracking, Binary Tree, DFS]|O(n)|O(nlogn)|Java|384|
|543|543. Diameter of Binary Tree.java|Easy|[Tree]|O(n) when non-balanced|O(n) when non-balanced|Java|385|
|398|398. Random Pick Index.java|Medium|[Reservior Sampling]|O(n)|O(n) for input int[], O(1) extra space used|Java|386|
|238|238. Product of Array Except Self.java|Medium|[Array, PreProduct]|O(n)|O(1)|Java|387|
|1060|1060. Missing Element in Sorted Array.java|Medium|[Binary Search]|O(logn)|O(1)|Java|388|
|1048|1048. Longest String Chain.java|Medium|[Bucket Sort, DP, Hash Table, Sort]|O(n)|O(n)|Java|389|
|67|67. Add Binary.java|Easy|[Math, String, Two Pointers]|||Java|390|
|299|299. Bulls and Cows.java|Medium|[Hash Table]|O(n)|O(n)|Java|391|
|557|557. Reverse Words in a String III.java|Easy|[String]|||Java|392|
|203|203. Remove Linked List Elements.java|Easy|[Linked List]|||Java|393|
|1219|1219. Path with Maximum Gold.java|Medium|[Backtracking, DFS]|O(n^2)|O(n) recursive depth|Java|394|
|266|266. Palindrome Permutation.java|Easy|[Hash Table]|O(n)|O(n)|Java|395|
|62|62. Unique Path.java|Medium|[Array, Coordinate DP, DP]|O(mn)|O(mn), rolling array O(n)|Java|396|
|1091|1091. Shortest Path in Binary Matrix.java|Medium|[BFS]|O(n^2)||Java|397|
|1110|1110. Delete Nodes And Return Forest.java|Medium|[DFS, Divide and Conquer, Tree]|O(n)|O(logn)|Java|398|
|1249|1249. Minimum Remove to Make Valid Parentheses.java|Medium|[Stack, String]|O(n)|O(n)|Java|399|
|15|15. 3Sum.java|Medium|[Array, Sort, Two Pointers]|O(n^2)||Java|400|
|311|311. Sparse Matrix Multiplication.java|Medium|[Hash Table]|O(mnk), where m = A.row
, n = B.col
, k = A.col = B.row
|O(1) extra|Java|401|
|339|339. Nested List Weight Sum.java|Easy|[BFS, DFS, NestedInteger]|O(n)|O(h), h = levels|Java|402|
|322|322. Coin Change.java|Medium|[Backpack DP, DFS, DP, Memoization]|O(n * S)|O(S)|Java|403|
|55|55. Jump Game.java|Medium|[Array, DP, Greedy]|O(n)|O(1)|Java|404|
|173|173. Binary Search Tree Iterator.java|Medium|[BST, Design, Stack, Tree]|O(1) average|O(h)|Java|405|
|140|140. Word Break II.java|Hard|[Backtracking, DFS, DP, Hash Table, Memoization]|O(n!)|O(n!)|Java|406|
|51|51. N-Queens.java|Hard|[Backtracking]|O(n!)|O(n^2)|Java|407|
|875|875. Koko Eating Bananas.java|Medium|[Binary Search]|O(n*logM)|O(1)|Java|408|
|189|189. Rotate Array.java|Easy|[Array, Rotation]|||Java|409|
|19|19. Remove Nth Node From End of List.java|Medium|[Linked List, Two Pointers]|O(n)|O(1)|Java|410|
|134|134. Gas Station.java|Medium|[Greedy]|O(n)|O(1)|Java|411|
|119|119. Pascal's Triangle II.java|Easy|[Array, Basic Implementation]|O(k^2), pascal triangle size|O(k^2)|Java|412|
|1197|1197. Minimum Knight Moves.java|Medium|[BFS]|O(8^n)|O(8^n)|Java|413|
|493|493. Reverse Pairs.java|Medium|[BST, Binary Indexed Tree, Divide and Conquer, Merge Sort, Segment Tree]|||Java|414|
|1306|1306. Jump Game III.java|Medium|[BFS, Graph]|O(n)|O(n)|Java|415|
|305|305. Number of Islands II.java|Hard|[Union Find]|O(k * log(mn))|O(mn)|Java|416|
|206|206. Reverse Linked List.java|Easy|[Linked List]|||Java|417|
|277|277. Find the Celebrity.java|Medium|[Adjacency Matrix, Array, Graph, Greedy, Pruning]|O(n)|O(1)|Java|418|
|741|741. Cherry Pickup.java|Hard|[DFS, DP]|O(n^3)|O(n^3), memo size|Java|419|
|168|168. Excel Sheet Column Title.java|Easy|[Math]|O(n)|O(1)|Java|420|
|104|104. Maximum Depth of Binary Tree.java|Easy|[DFS, Tree]|||Java|421|
|349|349. Intersection of Two Arrays.java|Easy|[Binary Search, Hash Table, Sort, Two Pointers]|O(m + n)|O(m + n)|Java|422|
|443|443. String Compression.java|Easy|[Basic Implementation, String]|||Java|423|
|297|297. Serialize and Deserialize Binary Tree.java|Hard|[BFS, DFS, Deque, Design, Divide and Conquer, Tree]|O(n)|O(n)|Java|424|
|46|46. Permutations.java|Medium|[BFS, Backtracking, DFS, Permutation]|O(n!)|O(n!)|Java|425|
|844|844. Backspace String Compare.java|Easy|[Stack, Two Pointers]|O(n)|O(1)|Java|426|
|9|9. Palindrome Number.java|Easy|[Math]|||Java|427|
|1094|1094. Car Pooling.java|Medium|[Greedy, Heap, PriorityQueue, Sort]|O(n)|O(1) only use bucket size 1000|Java|428|
|245|245. Shortest Word Distance III.java|Medium|[Array, Design, Hash Table, Two Pointers]|O(n)|O(1)|Java|429|
|1117|1117. Building H2O.java|Medium|[Lock, Semaphore, Thread]|||Java|430|
|973|973. K Closest Points to Origin.java|Medium|[Divide and Conquer, Heap, Sort]|O(klogk)|O(k)|Java|431|
|771|771. Jewels and Stones.java|Easy|[Hash Table]|O(n)|O(n)|Java|432|
|200|200. Number of Islands.java|Medium|[BFS, DFS, Matrix DFS, Union Find]|O(n)|O(n)|Java|433|
|141|141. Linked List Cycle.java|Easy|[Cycle Detection, Linked List, Slow Fast Pointer, Two Pointers]|O(n)|O(1)|Java|434|
|567|567. Permutation in String.java|Medium|[Sliding Window, Two Pointers]|O(m + n)|O(1)|Java|435|
|727|727. Minimum Window Subsequence.java|Hard|[DP, Hash Table, Sliding Window, String, Two Pointers]|O(n^2)|O(1)|Java|436|
|158|158. Read N Characters Given Read4 II - Call multiple times.java|Hard|[Enumeration, String]|O(n)|O(n)|Java|437|
|369|369. Plus One Linked List.java|Medium|[Linked List]|O(n)|O(1)|Java|438|
|211|211. Add and Search Word - Data structure design.java|Medium|[Backtracking, Design, Trie]|O(n) to search and to add word|< O(mn), depends on the input. m = # of words|Java|439|
|43|43. Multiply Strings.java|Medium|[Math, String]|O(mn)|O(mn)|Java|440|
|621|621. Task Scheduler.java|Medium|[Array, Enumeration, Greedy, PriorityQueue, Queue]|O(n)|O(1)|Java|441|
|680|680. Valid Palindrome II.java|Easy|[String]|||Java|442|
|295|295. Find Median from Data Stream.java|Hard|[Design, Heap, MaxHeap, MinHeap]|O(1) get, O(logn) addNum|O(n)|Java|443|
|70|70. Climbing Stairs.java|Easy|[DP, Memoization, Sequence DP]|||Java|444|
|747|747. Largest Number At Least Twice of Others.java|Easy|[Array]|||Java|445|
|315|315. Count of Smaller Numbers After Self.java|Hard|[BST, Binary Indexed Tree, Binary Search, Divide and Conquer, Segment Tree]|O(nlogn)|O(n)|Java|446|
|239|239. Sliding Window Maximum.java|Hard|[Deque, Heap, Sliding Window]|O(n)|O(n)|Java|447|
|47|47. Permutations II.java|Medium|[Backtracking, DFS]|||Java|448|
|332|332. Reconstruct Itinerary.java|Medium|[Backtracking, DFS, Graph]|O(n^n)|O(?m)|Java|449|
|88|88. Search in Rotated Sorted Array II.java|Medium|[Array, Binary Search]|O(logn), worst O(n)|O(1)|Java|450|
|561|561. Array Partition I.java|Easy|[Array]|O(nlogn)|O(1)|Java|451|
|387|387. First Unique Character in a String.java|Easy|[Hash Table, String]|O(n)|O(256) = O(1)|Java|452|
|345|345. Reverse Vowels of a String.java|Easy|[String, Two Pointers]|||Java|453|
|39|39. Combination Sum.java|Medium|[Array, Backtracking, Combination, DFS]|O(k * 2^n), k = avg rst length|O(k) stack depth, if not counting result size|Java|454|
|10|10. Regular Expression Matching.java|Hard|[Backtracking, DP, Double Sequence DP, Sequence DP, String]|||Java|455|
|367|367. Valid Perfect Square.java|Easy|[Binary Search, Math]|O(logN)|O(1)|Java|456|
|270|270. Closest Binary Search Tree Value.java|Easy|[BST, Binary Search, Tree]|O(logn)|O(1)|Java|457|
|28|28. Implement strStr().java|Easy|[String, Two Pointers]|||Java|458|
|1106|1106. Parsing A Boolean Expression.java|Hard|[DFS, Stack, String]|||Java|459|
|144|144. Binary Tree Preorder Traversal.java|Medium|[BFS, DFS, Stack, Tree]|O(n)|O(n)|Java|460|
|852|852. Peak Index in a Mountain Array.java|Easy|[Binary Search]|O(logn)|O(1)|Java|461|
|146|146. LRU Cache.java|Medium|[Design, Doubly Linked List, Hash Table, Linked List]|O(1)|O(1)|Java|462|
|110|110. Balanced Binary Tree.java|Easy|[DFS, Tree]|||Java|463|
|1040|1040. Moving Stones Until Consecutive II.java|Medium|[Array, Sliding Window]|O(nlogn)|O(n)|Java|464|
|246|246. Strobogrammatic Number.java|Easy|[Enumeration, Hash Table, Math, Two Pointers]|O(n)|O(1)|Java|465|
|100|100. Same Tree.java|Easy|[BFS, DFS, Tree]|O(n)|O(logn)|Java|466|
|307|307. Range Sum Query - Mutable.java|Medium|[Binary Indexed Tree, Segment Tree]|build O(n), query (logn +k), update O(logn)|O(n)|Java|467|
|88|88. Merge Sorted Array.java|Easy|[Array, Two Pointers]|O(n)|O(1)|Java|468|
|319|319. Bulb Switcher.java|Medium|[Brainteaser, Math]|O(1)|O(1)|Java|469|
|112|112. Path Sum.java|Easy|[DFS, Tree]|||Java|470|
|463|463. Island Perimeter.java|Easy|[Hash Table]|O(n)||Java|471|
|170|170. Two Sum III - Data structure design.java|Easy|[Design, Hash Table, Memoization]|O(n)|O(n)|Java|472|
|122|122. Best Time to Buy and Sell Stock II.java|Easy|[Array, DP, Greedy, Sequence DP, Status DP]|O(n)|O(1) greedy, O(n) dp|Java|473|
|715|715. Range Module.java|Hard|[Segment Tree, TreeSet]|query O(logn), update O(n)|O(n)|Java|474|
|12|12. Integer to Roman.java|Medium|[Basic Implementation, Math, String]|O(n)|O(n)|Java|475|
|14|14. Longest Common Prefix.java|Easy|[String]|||Java|476|
|243|243. Shortest Word Distance.java|Easy|[Array, Two Pointers]|O(n)|O(1)|Java|477|
|414|414. Third Maximum Number.java|Easy|[Array, PriorityQueue]|||Java|478|
|1267|1267. Count Servers that Communicate.java|Medium|[Array, Graph]|O(mn)|O(m + n)|Java|479|
|20|20. Valid Parentheses.java|Easy|[Stack, String]|O(n)|O(n)|Java|480|
|893|893. Groups of Special-Equivalent Strings.java|Easy|[Basic Implementation, String]|||Java|481|
|427|427. Construct Quad Tree.java|Medium|[Tree]|O(n^2)|O(n^2)|Java|482|
|981|981. Time Based Key-Value Store.java|Medium|[Binary Search, Hash Table, TreeMap]|set O(1), get(logn)|O(n)|Java|483|
|169|169. Majority Element.java|Easy|[Array, Bit Manipulation, Divide and Conquer, Moore Voting, Sort]|O(n)|O(1)|Java|484|
|234|234. Palindrome Linked List.java|Easy|[Linked List, Two Pointers]|O(n)|O(1)|Java|485|
|202|202. Happy Number.java|Easy|[Hash Table, Math]|O(m), m iterations|O(m), m number in set|Java|486|
|69|69. Sqrt(x).java|Easy|[Binary Search, Math]|||Java|487|
|876|876. Middle of Linked List.java|Easy|[Linked List]|||Java|488|
|1026|1026. Maximum Difference Between Node and Ancestor.java|Medium|[DFS, Tree]|O(n)|O(logn)|Java|489|
|78|78. Subsets.java|Medium|[Array, BFS, Backtracking, Bit Manipulation, DFS]|O(2^n)|O(2^n)|Java|490|
|432|432. All One Data Structure.java|Hard|[Design, Doubly Linked List]|O(1)|O(n)|Java|491|
|380|380. Insert Delete GetRandom O(1).java|Medium|[Array, Design, Hash Table]|O(1) avg|O(n)|Java|492|
|560|560. Subarray Sum Equals K.java|Medium|[Array, Hash Table, PreSum, Subarray]|O(n)|O(n)|Java|493|
|219|219. Contains Duplicate II.java|Easy|[Array, Hash Table]|O(n)|O(n)|Java|494|
|91|91. Decode Ways.java|Medium|[DP, Partition DP, String]|O(n)|O(n)|Java|495|
|205|205. Isomorphic Strings.java|Easy|[Hash Table]|O(n)|O(n)|Java|496|
|639|639. Decode Ways II.java|Hard|[DP, Enumeration, Partition DP]|O(n)|O(n)|Java|497|
|346|346. Moving Average from Data Stream.java|Easy|[Design, Queue, Sliding Window]|O(1) for next()
|O(size) for fixed storage|Java|498|
|145|145. Binary Tree Postorder Traversal.java|Medium|[Stack, Tree, Two Stacks]|O(n)|O(n)|Java|499|
|938|938. Range Sum of BST.java|Easy|[BST, Recursion, Tree]|||Java|500|
|210|210. Course Schedule II.java|Medium|[BFS, DFS, Graph, Topological Sort]|O(n)|O(n)|Java|501|
|68|68. Text Justification.java|Hard|[Enumeration, String]|O(n) go over words|O(maxLength) buffer list|Java|502|
|314|314. Binary Tree Vertical Order Traversal.java|Medium|[BFS, DFS, Hash Table, Tree]|O(n)|O(n)|Java|503|
|287|287. Find the Duplicate Number.java|Medium|[Array, Binary Search, Binary Search on Value, Cycle Detection, Slow Fast Pointer, Two Pointers]|O(n)|O(1)|Java|504|
|242|242. Valid Anagram.java|Easy|[Hash Table, Sort]|O(n)|O(1), unique chars|Java|505|
|340|340. Longest Substring with At Most K Distinct Characters.java|Hard|[Hash Table, LinkedHashMap, Sliding Window, String, Two Pointers]|O(n)|O(k)|Java|506|
|217|217. Contains Duplicate.java|Easy|[Array, Hash Table]|O(n)|O(1)|Java|507|
|103|103. Binary Tree Zigzag Level Order Traversal.java|Medium|[BFS, Stack, Tree]|O(n)|O(n)|Java|508|
|1057|1057. Campus Bikes.java|Medium|[Bucket Sort, Greedy, PriorityQueue, Sort]|O(mn)|O(mn)|Java|509|
|261|261. Graph Valid Tree.java|Medium|[BFS, DFS, Graph, Union Find]|||Java|510|
|64|64. Minimum Path Sum.java|Medium|[Array, Coordinate DP, DP]|O(mn)|O(n) rolling array|Java|511|
|796|796. Rotate String.java|Easy|[String]|||Java|512|
|229|229. Majority Element II.java|Medium|[Array, Moore Voting]|O(n)|(1)|Java|513|
|1041|1041. Robot Bounded In Circle.java|Easy|[String]|||Java|514|
|2|2. Add Two Numbers.java|Medium|[Linked List, Math]|O(max(m,n))|O(max(m,n))|Java|515|
|157|157. Read N Characters Given Read4.java|Easy|[Enumeration, String]|||Java|516|
|114|114. Flatten Binary Tree to Linked List.java|Medium|[Binary Tree, DFS]|O(n)|O(n), stacks|Java|517|
|121|121. Best Time to Buy and Sell Stock.java|Easy|[Array, DP, Sequence DP]|||Java|518|
|1004|1004. Max Consecutive Ones III.java|Medium|[Sliding Window, Two Pointers]|O(n)|O(1)|Java|519|
|1146|1146. Snapshot Array.java|Medium|[Array, Hash Table, TreeMap]|O(1) set, O(logn) get, O(x) snap, x = # of changes|O(n * m), n = array size, m = # of snaps|Java|520|
|273|273. Integer to English Words.java|Hard|[Enumeration, Math, String]|O(n)|O(1)|Java|521|
|304|304. Range Sum Query 2D - Immutable.java|Medium|[DP, PreSum]|O(mn) build, O(1) query|O(mn)|Java|522|
|605|605. Can Place Flowers.java|Easy|[Array, Greedy]|O(n)|O(1)|Java|523|
|1|1. Two Sum.java|Easy|[Array, Hash Table]|O(n)|O(n)|Java|524|
|118|118. Pascal's Triangle.java|Easy|[Array, Basic Implementation, List]|O(n^2) based on pascal triangle size|O(n^2)|Java|525|
|23|23. Merge k Sorted Lists.java|Medium|[Divide and Conquer, Heap, Linked List, Merge Sort, PriorityQueue]|O(nlogk)|O(logk)|Java|526|
|283|283. Move Zeroes.java|Easy|[Array, Two Pointers]|O(n)|O(1)|Java|527|
|208|208. Implement Trie (Prefix Tree).java|Medium|[Design, Trie]|||Java|528|
|516|516. Longest Palindromic Subsequence.java|Medium|[DFS, DP, Interval DP, Memoization]|O(n^2)|O(n^2)|Java|529|
|218|218. The Skyline Problem.java|Hard|[BIT, Divide and Conquer, HashHeap, Heap, PriorityQueue, Segment Tree, Sweep Line]|O(n^2logn)|O(n)|Java|530|
|430|430. Flatten a Multilevel Doubly Linked List.java|Medium|[DFS, Linked List]|O(n)|O(1)|Java|531|
|63|63. Unique Paths II.java|Medium|[Array, Coordinate DP, DP]|O(mn)|O(mn)|Java|532|
|52|52. N-Queens II.java|Hard|[Backtracking]|O(n!)|O(n)|Java|533|
|1033|1033. Moving Stones Until Consecutive.java|Easy|[Basic Implementation, Sort]|O(1), only 3 elements|O(1)|Java|534|
|139|139. Word Break.java|Medium|[DP, Hash Table, Sequence DP]|O(n^2)|O(n)|Java|535|
|105|105. Construct Binary Tree from Preorder and Inorder Traversal.java|Medium|[Array, DFS, Divide and Conquer, Hash Table, Tree]|O(n)|O(n)|Java|536|
|125|125. Valid Palindrome.java|Easy|[String, Two Pointers]|||Java|537|
|449|449. Serialize and Deserialize BST.java|Medium|[Tree]|O(n)|O(??n)|Java|538|
|274|274.H-Index.java|Medium|[Bucket Sort, Hash Table, Sort]|O(n)|O(n)|Java|539|
|160|160. Intersection of Two Linked Lists.java|Easy|[Linked List]|||Java|540|
|40|40. Combination Sum II.java|Medium|[Array, Backtracking, Combination, DFS]|O(k * 2^n), k = avg rst length|O(n) stack depth, if not counting result size|Java|541|
|410|410. Split Array Largest Sum.java|N/A|[]|||Java|542|
|724|724. Find Pivot Index.java|Easy|[Array, PreSum]|O(n)|O(1)|Java|543|
|523|523. Continuous Subarray Sum.java|Medium|[Coordinate DP, DP, Math, PreSum, Subarray]|O(n)|O(k)|Java|544|
|65|65. Valid Number.java|Hard|[Enumeration, Math, String]|O(n)|O(1)|Java|545|
|350|350. Intersection of Two Arrays II.java|Easy|[Binary Search, Hash Table, Sort, Two Pointers]|(n)|(n)|Java|546|
|364|364. Nested List Weight Sum II.java|Medium|[DFS, NestedInteger]|O(n), visit all nodes|O(h), depth|Java|547|
|49|49. Group Anagrams.java|Medium|[Hash Table, String]|O(nk)|O(nk)|Java|548|
|720|720. Longest Word in Dictionary.java|Easy|[Hash Table, Trie]|O(nlogn)|O(n)|Java|549|
|438|438. Find All Anagrams in a String.java|Medium|[Hash Table, Sliding Window, Two Pointers]|O(n)|O(1)|Java|550|
|632|632. Smallest Range Covering Elements from K Lists.java|Hard|[Hash Table, Sliding Window, Two Pointers]|O(nlogn), n = total elements|O(n) to store sorted list|Java|551|
|138|138. Copy List with Random Pointer.java|Medium|[Hash Table, Linked List]|O(n)|O(n)|Java|552|
|159|159. Longest Substring with At Most Two Distinct Characters.java|Medium|[Hash Table, Sliding Window, String, Two Pointers]|O(n)|O(1)|Java|553|
|1043|1043. Partition Array for Maximum Sum.java|Medium|[DFS, DP, Graph, Memoization]|O(n), calc memo[n]|O(n)|Java|554|
|33|33. Search in Rotated Sorted Array.java|Medium|[Array, Binary Search]|O(logn)|O(1)|Java|555|
|760|760. Find Anagram Mappings.java|Easy|[Hash Table]|O(n)|O(n)|Java|556|
|133|133. Clone Graph.java|Medium|[BFS, DFS, Graph]|O(n)|O(n)|Java|557|
|743|743. Network Delay Time.java|Medium|[BFS, DFS, Graph, Heap, PQ]|O(nlogn)|O(n)|Java|558|
|636|636. Exclusive Time of Functions.java|Medium|[Stack]|O(n)|O(n)|Java|559|
|692|692. Top K Frequent Words.java|Medium|[Hash Table, Heap, MaxHeap, MinHeap, PriorityQueue, Trie]|O(n)|O(n)|Java|560|
|1170|1170. Compare Strings by Frequency of the Smallest Character.java|Easy|[Array, String]|O(m + n)|O(m + n)|Java|561|
|426|426. Convert Binary Search Tree to Sorted Doubly Linked List.java|Medium|[BST, DFS, Divide and Conquer, Linked List, Tree]|O(n)|O(1)|Java|562|
|745|745. Prefix and Suffix Search.java|Hard|[Trie]|O(N + Q)|O(N)|Java|563|
|8|8. String to Integer (atoi).java|Medium|[Math, String]|O(n)|O(n)|Java|564|
|361|361. Bomb Enemy.java|Medium|[Coordinate DP, DP]|O(mn)|O(n) by calculating column sum|Java|565|
|94|94. Binary Tree Inorder Traversal.java|Easy|[Hash Table, Stack, Tree]|O(n)|O(logn)|Java|566|
|402|402. Remove K Digits.java|Medium|[Greedy, Monotonous Stack, Stack]|O(n)|O(n)|Java|567|
|98|98. Validate Binary Search Tree.java|Medium|[BST, DFS, Divide and Conquer, Tree]|O(n)|O(logn)|Java|568|
|1123|1123. Lowest Common Ancestor of Deepest Leaves.java|Medium|[BFS, DFS, Tree]|O(n)|O(n)|Java|569|
|921|921. Minimum Add to Make Parentheses Valid.java|Medium|[]|O(n)|O(1)|Java|570|
|399|399. Evaluate Division.java|Medium|[BFS, DFS, Graph, Union Find]|||Java|571|
|785|785. Is Graph Bipartite.java|Medium|[BFS, DFS, Garph]|O(n)|O(n)|Java|572|
|767|767. Reorganize String.java|Medium|[Greedy, Hash Table, Heap, Sort, String]|O(m), m = # of unique letters|O(nLogm), n = length|Java|573|
|71|71. Simplify Path.java|Medium|[Stack, String]|O(n)|O(n)|Java|574|
|34|34. Find First and Last Position of Element in Sorted Array.java|Medium|[Array, Binary Search]|O(logn)|O(1)|Java|575|
|278|278. First Bad Version.java|Easy|[Binary Search]|O(logN)|O(1)|Java|576|
|124|124. Binary Tree Maximum Path Sum.java|Hard|[DFS, DP, Tree, Tree DP]|O(n)|O(logn)|Java|577|
|721|721. Accounts Merge.java|Medium|[DFS, Hash Table, Union Find]|||Java|578|
|689|689. Maximum Sum of 3 Non-Overlapping Subarrays.java|Hard|[Array, DP]|O(n)|O(n)|Java|579|
|101|101. Symmetric Tree.java|Easy|[BFS, DFS, Tree]|O(n)|O(n)|Java|580|
|149|149. Max Points on a Line.java|Hard|[Array, Geometry, Hash Table, Math]|O(n^2)|O()|Java|581|
|698|698. Partition to K Equal Sum Subsets.java|Medium|[DFS, DP, Recursion]|O(k^(n-k) * k!)|O(n)|Java|582|
|57|57. Insert Interval.java|Hard|[Array, PriorityQueue, Sort, Sweep Line]|O(n)|O(n)|Java|583|
|13|13. Roman to Integer.java|Easy|[Math, String]|O(n)|O(1)|Java|584|
|716|716. Max Stack.java|Medium|[Design, Doubly Linked List, Stack, TreeMap]|avg O(1), [O(logN) peekMax(), TreeMap]; [O(n) popMax(), TwoStack]|O(n)|Java|585|
|671|671. Second Minimum Node In a Binary Tree.java|Easy|[BFS, Tree]|O(n)|O(n) leaf nodes|Java|586|
|366|366. Find Leaves of Binary Tree.java|Medium|[DFS, Tree]|O(n)|O(h)|Java|587|
|235|235. Lowest Common Ancestor of a Binary Search Tree.java|Easy|[BST, DFS, Tree]|O(logn)|O(logn)|Java|588|
|156|156. Binary Tree Upside Down.java|Medium|[DFS, Tree]|O(n)|O(h)|Java|589|
|416|416. Partition Equal Subset Sum.java|Medium|[Backpack, DP]|||Java|590|
|611|611. Valid Triangle Number.java|Medium|[Array, Two Pointers]|O(n^2)|O(logn), sorting space|Java|591|
|341|341. Flatten Nested List Iterator.java|Medium|[Design, NestedInteger, Stack]|O(n)|O(n)|Java|592|
|254|254. Factor Combinations.java|Medium|[BFS, Backtracking, DFS]|O(x), x is the # of results|O(y), y is all ongoing candidates in queue|Java|593|
|739|739. Daily Temperatures.java|Medium|[Hash Table, Monotonous Stack, Stack]|O(n)|O(n)|Java|594|
|373|373. Find K Pairs with Smallest Sums.java|Medium|[Heap, MaxHeap, MinHeap]|O(klogk)|O(k)|Java|595|
|256|256. Paint House.java|Easy|[DP, Sequence DP, Status DP]|O(nm), m = # of colors|O(nm), or O(1) with rolling array|Java|596|
|265|265. Paint House II.java|Hard|[DP, Sequence DP, Status DP]|O(NK^2):|O(K) with rolling array|Java|597|
|272|272. Closest Binary Search Tree Value II.java|Hard|[Stack, Tree]|O(n)|O(n)|Java|598|
|72|72. Edit Distance.java|Hard|[DP, Double Sequence DP, Sequence DP, String]|O(MN)||Java|599|
|215|215. Kth Largest Element in an Array.java|Medium|[Divide and Conquer, Heap, MinHeap, PriorityQueue, Quick Select, Quick Sort]|O(nlogk)|O(k)|Java|600|