GitHub - pxu/LintCode-2: Java Solutions to problems on LintCode/LeetCode

0 Binary Tree Zigzag Level Order Traversal.java Medium Java [BFS, Stack, Tree] 1 Count of Smaller Number before itself.java Hard Java [] 2 Count of Smaller Number.java Review Java [Binary Search, Segment Tree] 3 Delete Digits.java Medium Java [] 4 Find the Weak Connected Component in the Directed Graph.java Medium Java [Union Find] 5 Flatten 2D Vector.java Medium Java [Design] 6 Fraction to Recurring Decimal.java Medium Java [Hash Table, Math] 7 Gray Code.java Medium Java [Backtracking] 8 Group Shifted Strings.java Easy Java [] 9 Hamming Distance.java Easy Java [] 10 Happy Number.java Easy Java [] 11 HashHeap.java Hard Java [] 12 HashWithArray.java Easy Java [] 13 Heapify.java Review Java [Heap] 14 Heaters.java Easy Java [] 15 IndexMatch.java Easy Java [] 16 Inorder Successor in Binary Search Tree.java Medium Java [BST, Tree] 17 Insert Node in a Binary Search Tree .java Easy Java [BST] 18 Intersection of Two Arrays.java Easy Java [] 19 Intersection of Two Linked Lists.java Easy Java [Linked List] 20 Interval Sum II.java Hard Java [] 21 Isomorphic Strings.java Easy Java [] 22 Jewels and Stones.java Easy Java [Hash Table] 23 Kth Largest Element.java Review Java [Divide and Conquer, Heap, Quick Sort] 24 Kth Smallest Sum In Two Sorted Arrays.java Hard Java [] 25 LFU Cache.java Hard Java [Design, Hash Table] 26 Longest Univalue Path.java Easy Java [] 27 Majority Number II.java Medium Java [Enumeration, Greedy] 28 Majority Number III.java Medium Java [Hash Table, Linked List] 29 Matrix Zigzag Traversal.java Easy Java [] 30 Maximum Subarray III.java Review Java [] 31 Minimum Absolute Difference in BST.java Easy Java [BST] 32 Minimum Height Trees.java Medium Java [BFS, Graph] 33 Minimum Subarray.java Easy Java [Array, Greedy] 34 Missing Ranges.java Medium Java [Array] 35 Multiply Strings.java Medium Java [Math, String] 36 Next Permutation.java Medium Java [Array] 37 O(1) Check Power of 2.java Easy Java [Bit Manipulation] 38 Palindrome Permutation II.java Medium Java [Backtracking, Permutation] 39 Partition Array by Odd and Even.java Easy Java [Array, Two Pointers] 40 Pascal's Triangle II.java Easy Java [] 41 Permutation Index.java Easy Java [] 42 Permutation Sequence.java Medium Java [Backtracking, Math] 43 Populating Next Right Pointers in Each Node II.java Hard Java [] 44 Product of Array Exclude Itself.java Medium Java [Array] 45 Recover Rotated Sorted Array.java Easy Java [Array] 46 Remove Duplicates from Unsorted List.java Medium Java [Linked List] 47 Remove Node in Binary Search Tree.java Hard Java [BST] 48 Reshape the Matrix.java Easy Java [] 49 Reverse String.java Easy Java [] 50 Roman to Integer.java Easy Java [] 51 Rotate Image.java Medium Java [Array, Enumeration] 52 Search Insert Position.java Easy Java [] 53 Search Rotated in Sorted Array II.java Medium Java [Array, Binary Search] 54 Search Rotated in Sorted Array.java Hard Java [] 55 Shortest Word Distance.java Easy Java [] 56 Single Number II.java Medium Java [Bit Manipulation] 57 Single Number III.java Medium Java [Bit Manipulation] 58 Single Number.java Easy Java [] 59 Sliding Window Maximum.java Hard Java [] 60 Space Replacement.java Medium Java [String] 61 Stone Game.java Medium Java [DP] 62 String Permutation.java Easy Java [] 63 String to Integer(atoi).java Easy Java [] 64 Strobogrammatic Number.java Easy Java [] 65 Subarray Sum II.java Hard Java [Array, Binary Search, Two Pointers] 66 The Smallest Difference.java Medium Java [Array, Sort, Two Pointers] 67 Total Occurrence of Target.java Medium Java [] 68 Trailing Zeros.java Easy Java [Math] 69 Two Lists Sum.java Medium Java [Linked List] 70 Two Strings Are Anagrams.java Easy Java [] 71 Ugly Number II.java Medium Java [DP, Heap, Math] 72 Valid Parentheses.java Easy Java [] 73 Valid Sudoku.java Easy Java [] 74 Word Ladder II.java Hard Java [] 75 Word Pattern.java Easy Java [] 76 Zigzag Iterator.java Medium Java [BST] 77 Find Anagram Mappings.java Easy Java [Hash Table] 78 Judge Route Circle.java Easy Java [String] 79 Island Perimeter.java Easy Java [Hash Table] 80 First Unique Character in a String.java Easy Java [Hash Table, String] 81 Power of Three.java Easy Java [Math] 82 Plus One.java Easy Java [Array, Math] 83 Power of Two.java Easy Java [Bit Manipulation, Math] 84 Reverse Vowels of a String.java Easy Java [String, Two Pointers] 85 Guess Number Higher or Lower.java Easy Java [Binary Search] 86 Encode and Decode TinyURL.java Medium Java [Hash Table, Math] 87 Wiggle Sort.java Medium Java [Array, Sort] 88 Queue Reconstruction by Height.java Medium Java [Greedy] 89 2 Sum II - Input array is sorted.java Medium Java [Array, Binary Search, Two Pointers] 90 2 Sum II.java Medium Java [Array, Binary Search, Two Pointers] 91 Coin Change.java Medium Java [DP, Memoization, Sequence DP] 92 Maximum Product Subarray.java Medium Java [Array, DP] 93 3 Sum Closest.java Medium Java [Array, Two Pointers] 94 Triangle Count.java Medium Java [Array] 95 3 Sum.java Medium Java [Array, Two Pointers] 96 4 Sum.java Medium Java [Hash Table] 97 k Sum.java Hard Java [DP] 98 Longest Increasing Subsequence.java Medium Java [Binary Search, Coordinate DP, DP, Memoization, Sequence DP] 99 Unique Binary Search Tree.java Medium Java [BST, DP, Tree] 100 Trim a Binary Search Tree.java Easy Java [BST, Tree] 101 Unique Paths II.java Medium Java [Array, Coordinate DP, DP] 102 Bomb Enemy.java Medium Java [Coordinate DP, DP] 103 3 Sum Smaller.java Medium Java [Array, Two Pointers] 104 Array Partition I.java Easy Java [Array] 105 1-bit and 2-bit Characters.java Easy Java [Array] 106 Non-decreasing Array.java Easy Java [Array] 107 Max Consecutive Ones.java Easy Java [Array] 108 Find All Numbers Disappeared in an Array.java Easy Java [Array] 109 Maximum Average Subarray I.java Easy Java [Array] 110 Largest Number At Least Twice of Others.java Easy Java [Array] 111 Toeplitz Matrix.java Easy Java [Array] 112 Sum of Two Integers.java Easy Java [Bit Manipulation] 113 Swap Bits.java Easy Java [Bit Manipulation] 114 Update Bits.java Medium Java [Bit Manipulation] 115 Maximum XOR of Two Numbers in an Array.java Medium Java [Bit Manipulation, Trie] 116 Perfect Squares.java Medium Java [BFS, DP, Math, Partition DP] 117 Backpack VI.java Medium Java [Backpack DP, DP] 118 Copy Books.java Hard Java [Binary Search, DP, Partition DP] 119 Valid Perfect Square.java Review Java [Binary Search, Math] 120 Intersection of Two Arrays II.java Easy Java [Binary Search, Hash Table, Sort, Two Pointers] 121 Scramble String.java Hard Java [DP, Interval DP, String] 122 Binary Search Tree Iterator.java Medium Java [BST, Design, Stack, Tree] 123 Flatten Nested List Iterator.java Medium Java [Design, Stack] 124 Best Time to Buy and Sell Stock with Cooldown.java Medium Java [DP] 125 Find Peak Element.java Medium Java [Array, Binary Search] 126 Longest Common Subsequence.java Medium Java [DP, Double Sequence DP] 127 Interleaving String.java Hard Java [DP, String] 128 Letter Combinations of a Phone Number.java Medium Java [Backtracking, String] 129 Edit Distance.java Hard Java [DP, Double Sequence DP, String] 130 Distinct Subsequences.java Hard Java [DP, String] 131 Regular Expression Matching.java Review Java [Backtracking, DP, String] 132 Majority Element.java Easy Java [Array, Bit Manipulation, Divide and Conquer] 133 Wildcard Matching.java Hard Java [Backtracking, DP, Greedy, String] 134 Ones and Zeroes.java Hard Java [DP] 135 Pow(x,n).java Medium Java [Binary Search, Math] 136 Word Break II.java Hard Java [Backtracking, DFS, DP, Memoization] 137 Nested List Weight Sum.java Easy Java [BFS, DFS] 138 Same Tree.java Easy Java [DFS, Tree] 139 Convert Sorted Array to Binary Search Tree.java Easy Java [DFS, Divide and Conquer, Tree] 140 Construct Binary Tree from Inorder and Preorder Traversal.java Medium Java [Array, DFS, Divide and Conquer, Hash Table, Tree] 141 Add Binary.java Easy Java [Math, String] 142 Add Digits.java Easy Java [Math] 143 Add Two Numbers.java Medium Java [Linked List, Math] 144 Add Two Numbers II.java Medium Java [Linked List] 145 Balanced Binary Tree.java Medium Java [DFS, Tree] 146 Valid Anagram.java Easy Java [Hash Table, Sort] 147 Populating Next Right Pointers in Each Node.java Medium Java [DFS, Divide and Conquer, Tree] 148 Validate Binary Search Tree.java Medium Java [BST, DFS, Divide and Conquer, Tree] 149 Convert Sorted List to Binary Search Tree.java Medium Java [BST, DFS, Divide and Conquer, Linked List] 150 Flatten Binary Tree to Linked List.java Medium Java [Binary Tree, DFS] 151 Binary Tree Paths.java Easy Java [Backtracking, Binary Tree, DFS] 152 Minimum Size Subarray Sum.java Medium Java [Array, Binary Search, Two Pointers] 153 Clone Graph.java Medium Java [BFS, DFS, Graph] 154 Longest Substring Without Repeating Characters.java Medium Java [Hash Table, String, Two Pointers] 155 Minimum Window Substring.java Hard Java [Hash Table, String, Two Pointers] 156 Linked List Cycle.java Easy Java [Linked List, Two Pointers] 157 Remove Nth Node From End of List.java Medium Java [Linked List, Two Pointers] 158 Longest Substring with At Most K Distinct Characters.java Medium Java [Hash Table, String] 159 Linked List Cycle II.java Medium Java [Linked List, Two Pointers] 160 Kth Smallest Number in Sorted Matrix.java Medium Java [Binary Search, Heap] 161 Find Minimum in Rotated Sorted Array.java Medium Java [Array, Binary Search] 162 Find Minimum in Rotated Sorted Array II.java Hard Java [Array, Binary Search] 163 Connecting Graph.java Medium Java [Union Find] 164 Connecting Graph II.java Medium Java [Union Find] 165 Connecting Graph III.java Medium Java [Union Find] 166 Number of Islands.java Medium Java [BFS, DFS, Matrix DFS, Union Find] 167 Number of Islands II.java Hard Java [Union Find] 168 Surrounded Regions.java Medium Java [BFS, DFS, Matrix DFS, Union Find] 169 Implement Trie.java Medium Java [Design, Trie] 170 Add and Search Word.java Medium Java [Backtracking, Design, Trie] 171 Word Search II.java Hard Java [Backtracking, DFS, Trie] 172 Word Search.java Medium Java [Array, Backtracking, DFS] 173 Word Squares.java Hard Java [Backtracking, Trie] 174 Trapping Rain Water.java Hard Java [Array, Stack, Two Pointers] 175 Trapping Rain Water II.java Hard Java [BFS, Heap] 176 Data Stream Median.java Hard Java [Design, Heap] 177 Sliding Window Median.java Hard Java [Design, Heap] 178 Min Stack.java Easy Java [Design, Stack] 179 Implement Queue using Stacks.java Easy Java [Design, Stack] 180 Decode String.java Medium Java [DFS, Divide and Conquer, Stack] 181 Largest Rectangle in Histogram.java Hard Java [Array, Monotonous Stack, Stack] 182 Maximum Binary Tree.java Medium Java [Stack, Tree] 183 Reverse Integer.java Easy Java [Math] 184 Swap Nodes in Pairs.java Medium Java [Linked List] 185 Find Peak Element II.java Hard Java [Binary Search, DFS, Divide and Conquer] 186 Sqrt(x).java Easy Java [Binary Search, Math] 187 First Bad Version.java Easy Java [Binary Search] 188 Wood Cut.java Medium Java [Binary Search] 189 Find the Duplicate Number.java Medium Java [Array, Binary Search, Two Pointers] 190 Palindrome Pairs.java Hard Java [Hash Table, String, Trie] 191 Game of Life.java Medium Java [Array] 192 Maximum Average Subarray II.java Review Java [Array, Binary Search, PreSum] 193 Meeting Rooms.java Easy Java [Sort, Sweep Line] 194 Number of Airplane in the sky.java Medium Java [Array, Interval, Sort, Sweep Line] 195 Meeting Rooms II.java Medium Java [Greedy, Heap, Sort, Sweep Line] 196 Building Outline.java Review Java [Binary Indexed Tree, Divide and Conquer, Heap, Segment Tree, Sweep Line] 197 Unique Path.java Medium Java [Array, Coordinate DP, DP] 198 Maximal Rectangle.java Hard Java [Array, DP, Hash Table, Stack] 199 Maximal Square.java Medium Java [Coordinate DP, DP] 200 Longest Increasing Path in a Matrix.java Hard Java [Coordinate DP, DFS, DP, Memoization, Topological Sort] 201 Coins in a Line.java Medium Java [DP, Game Theory, Greedy] 202 Coins in a Line II.java Medium Java [Array, DP, Game Theory, Memoization, MiniMax] 203 Binary Tree Inorder Traversal.java Easy Java [Hash Table, Stack, Tree] 204 Binary Tree Postorder Traversal.java Medium Java [Stack, Tree, Two Stacks] 205 Change to Anagram.java Easy Java [String] 206 Classical Binary Search.java Easy Java [Binary Search] 207 Climbing Stairs.java Easy Java [DP, Memoization, Sequence DP] 208 Coins in a Line III.java Hard Java [Array, DP, Game Theory, Interval DP, Memoization] 209 Closest Binary Search Tree Value.java Easy Java [BST, Binary Search, Tree] 210 Compare Version Numbers.java Medium Java [String] 211 Count Complete Tree Nodes.java Medium Java [Binary Search, Tree] 212 Course Schedule.java Medium Java [BFS, Backtracking, DFS, Graph, Topological Sort] 213 Course Schedule II.java Medium Java [BFS, DFS, Graph, Topological Sort] 214 Binary Tree Preorder Traversal.java Easy Java [BFS, DFS, Stack, Tree] 215 Closest Number in Sorted Array.java Easy Java [Binary Search] 216 Complete Binary Tree.java Easy Java [BFS, Tree] 217 Compare Strings.java Easy Java [String] 218 Contains Duplicate.java Easy Java [Array, Hash Table] 219 Contains Duplicate II.java Easy Java [Array, Hash Table] 220 Contains Duplicate III.java Medium Java [BST] 221 Burst Balloons.java Hard Java [DP, Divide and Conquer, Interval DP, Memoization] 222 Nim Game.java Easy Java [Brainteaser, DP, Game Theory] 223 Convert Integer A to Integer B.java Easy Java [Bit Manipulation] 224 Cosine Similarity.java Easy Java [Basic Implementation] 225 Count 1 in Binary.java Easy Java [Bit Manipulation] 226 Count and Say.java Easy Java [Basic Implementation, String] 227 One Edit Distance.java Medium Java [String] 228 K Edit Distance.java Hard Java [DP, Double Sequence DP, Trie] 229 Jump Game.java Medium Java [Array, DP, Greedy] 230 Coin Change 2.java Medium Java [Backpack DP, DP, Sequence DP] 231 Paint House.java Easy Java [DP, Sequence DP] 232 Decode Ways.java Medium Java [DP, Partition DP, String] 233 Longest Continuous Increasing Subsequence.java Easy Java [Array, Coordinate DP, DP] 234 Minimum Path Sum.java Medium Java [Array, Coordinate DP, DP] 235 Counting Bits.java Medium Java [Bit Manipulation, Bitwise DP, DP] 236 Continuous Subarray Sum.java Medium Java [Coordinate DP, DP, Math] 237 House Robber.java Easy Java [DP, Sequence DP] 238 House Robber II.java Medium Java [DP, Sequence DP] 239 House Robber III.java Medium Java [DFS, DP, Status DP, Tree] 240 Paint House II.java Hard Java [DP, Sequence DP] 241 Best Time to Buy and Sell Stock I.java Easy Java [Array, DP, Sequence DP] 242 Best Time to Buy and Sell Stock II.java Easy Java [Array, DP, Greedy, Sequence DP] 243 Best Time to Buy and Sell Stock III .java Hard Java [Array, DP, Sequence DP] 244 Best Time to Buy and Sell Stock IV.java Hard Java [DP, Sequence DP] 245 Russian Doll Envelopes.java Hard Java [Binary Search, Coordinate DP, DP] 246 Permutation in String.java Medium Java [Two Pointers] 247 Permutations II.java Medium Java [Backtracking] 248 Shuffle an Array.java Medium Java [Permutation] 249 Find All Anagrams in a String.java Easy Java [Hash Table] 250 Group Anagrams.java Medium Java [Hash Table, String] 251 Backpack.java Medium Java [Backpack DP, DP] 252 Backpack II.java Medium Java [Backpack DP, DP] 253 Backpack V.java Medium Java [Backpack DP, DP] 254 Count Primes.java Easy Java [Hash Table, Math] 255 Delete Node in a Linked List.java Easy Java [Linked List] 256 Excel Sheet Column Number.java Easy Java [Math] 257 Excel Sheet Column Title.java Easy Java [Math] 258 Flip Game.java Easy Java [String] 259 Expression Tree Build.java Hard Java [Binary Tree, Expression Tree, Minimum Binary Tree, Stack] 260 Expression Evaluation.java Hard Java [Binary Tree, DFS, Expression Tree, Minimum Binary Tree, Stack] 261 Convert Expression to Polish Notation.java Hard Java [Binary Tree, DFS, Expression Tree, Stack] 262 Convert Expression to Reverse Polish Notation.java Hard Java [Binary Tree, DFS, Expression Tree, Stack] 263 Evaluate Reverse Polish Notation.java Medium Java [Stack] 264 Decode Ways II.java Hard Java [DP, Partition DP] 265 Palindrome Partitioning II.java Hard Java [DP, Partition DP] 266 Backpack III.java Hard Java [Backpack DP, DP] 267 First Missing Positive.java Hard Java [Array] 268 Implement strStr().java Easy Java [String, Two Pointers] 269 Insertion Sort List.java Medium Java [Linked List, Sort] 270 Integer to English Words.java Hard Java [Math, String] 271 Interleaving Positive and Negative Numbers.java Medium Java [Two Pointers] 272 Largest Number.java Medium Java [Sort] 273 Last Position of Target.java Easy Java [Binary Search] 274 Length of Last Word.java Easy Java [String] 275 Longest Common Substring.java Medium Java [DP, Double Sequence DP, String] 276 Longest Increasing Continuous subsequence.java Easy Java [Array, Coordinate DP, DP] 277 Longest Increasing Continuous subsequence II.java Medium Java [Array, Coordinate DP, DP, Memoization] 278 N-Queens.java Hard Java [Backtracking] 279 N-Queens II.java Hard Java [Backtracking] 280 Longest Words.java Easy Java [Hash Map, String] 281 Maximum Subarray.java Easy Java [Array, DFS, DP, Divide and Conquer, PreSum, Sequence DP] 282 Maximum Subarray II.java Medium Java [Array, DP, Greedy, PreSum, Sequence DP] 283 Median.java Easy Java [Array, Quick Select, Quick Sort] 284 Merge Sorted Array.java Easy Java [Array, Two Pointers] 285 Middle of Linked List.java Easy Java [Linked List] 286 Singleton.java Easy Java [Design] 287 Remove Linked List Elements.java Easy Java [Linked List] 288 Fibonacci.java Easy Java [DP, Math, Memoization] 289 Palindrome Linked List.java Easy Java [Linked List, Two Pointers] 290 Reverse Linked List.java Easy Java [Linked List] 291 Reverse Linked List II .java Medium Java [Linked List] 292 Palindrome Permutation.java Easy Java [Hash Table] 293 Valid Palindrome.java Easy Java [String, Two Pointers] 294 Implement Stack using Queues.java Easy Java [Design, Stack] 295 Implement Stack.java Easy Java [Stack] 296 Invert Binary Tree.java Easy Java [BFS, DFS, Tree] 297 Maximum Depth of Binary Tree.java Easy Java [DFS, Tree] 298 Minimum Depth of Binary Tree.java Easy Java [BFS, DFS, Tree] 299 Symmetric Tree.java Easy Java [BFS, DFS, Tree] 300 Tweaked Identical Binary Tree.java Easy Java [DFS, Tree] 301 Merge Two Binary Trees.java Easy Java [DFS, Tree] 302 Subtree.java Easy Java [DFS, Tree] 303 Lowest Common Ancestor of a Binary Tree.java Medium Java [DFS, Tree] 304 Lowest Common Ancestor II.java Easy Java [Hash Table, Tree] 305 Lowest Common Ancestor of a Binary Search Tree.java Medium Java [BST, DFS, Tree] 306 Hash Function.java Easy Java [Hash Table] 307 Merge Two Sorted Lists.java Easy Java [Linked List] 308 Missing Number.java Easy Java [Array, Bit Manipulation, Math] 309 LRU Cache.java Hard Java [Design, Hash Table, Linked List] 310 Remove Duplicates from Sorted Array.java Easy Java [Array, Two Pointers] 311 Remove Duplicates from Sorted Array II.java Medium Java [Array, Two Pointers] 312 Remove Duplicates from Sorted List.java Easy Java [Linked List] 313 Remove Duplicates from Sorted List II.java Medium Java [Linked List] 314 QuickSort.java Medium Java [Sort] 315 MergeSort.java Medium Java [Merge Sort, Sort] 316 Longest Word in Dictionary.java Easy Java [Hash Table, Trie] 317 Anagrams.java Medium Java [Array, Hash Map] 318 Binary Tree Level Order Traversal.java Medium Java [BFS, DFS, Tree] 319 Binary Tree Level Order Traversal II.java Medium Java [BFS, Tree] 320 Binary Tree Longest Consecutive Sequence II.java Medium Java [DFS, Divide and Conquer, Double Recursive, Tree] 321 Binary Tree Maximum Path Sum.java Hard Java [DFS, DP, Tree, Tree DP] 322 Path Sum.java Easy Java [DFS, Tree] 323 Path Sum II.java Easy Java [Backtracking, DFS, Tree] 324 Path Sum III.java Easy Java [DFS, Double Recursive, Tree] 325 Rotate String.java Easy Java [String] 326 Path Sum IV.java Medium Java [DFS, Hash Map, Tree] 327 Combinations.java Medium Java [Backtracking, Combination, DFS] 328 Combination Sum.java Medium Java [Array, Backtracking, Combination, DFS] 329 Combination Sum II.java Medium Java [Array, Backtracking, Combination, DFS] 330 Combination Sum III.java Medium Java [Array, Backtracking, Combination, DFS] 331 Combination Sum IV.java Medium Java [Array, Backpack DP, DP] 332 Subset.java Medium Java [Array, BFS, Backtracking, Bit Manipulation, DFS] 333 Subsets II.java Medium Java [Array, BFS, Backtracking, DFS] 334 Binary Tree Right Side View.java Medium Java [BFS, DFS, Tree] 335 Binary Tree Maximum Path Sum II.java Medium Java [DFS, Tree] 336 Rotate List.java Medium Java [Linked List, Two Pointers] 337 Basic Calculator.java Hard Java [Binary Tree, Expression Tree, Math, Minimum Binary Tree, Stack] 338 Longest Consecutive Sequence.java Hard Java [Array, Hash Table, Union Find] 339 Binary Tree Longest Consecutive Sequence.java Medium Java [DFS, Divide and Conquer, Tree] 340 Number of Connected Components in an Undirected Graph.java Medium Java [BFS, DFS, Graph, Union Find] 341 Next Closest Time.java Medium Java [Basic Implementation, Enumeration, String] 342 Serilization and Deserialization Of Binary Tree.java Hard Java [BFS, DFS, Design, Divide and Conquer, Tree] 343 Partition Array.java Medium Java [Array, Quick Sort, Sort, Two Pointers] 344 Word Ladder.java Medium Java [BFS] 345 Word Break.java Medium Java [DP, Sequence DP] 346 Unique Word Abbreviation.java Medium Java [Design, Hash Table] 347 Unique Binary Search Tree II.java Medium Java [BST, DP, Divide and Conquer, Tree] 348 Ugly Number.java Medium Java [Math] 349 Top K Frequent Words.java Medium Java [Hash Table, Heap, PriorityQueue, Trie] 350 Segment Tree Build.java Medium Java [Binary Tree, Divide and Conquer, Segment Tree] 351 Segment Tree Build II.java Medium Java [Binary Tree, Divide and Conquer, Segment Tree] 352 Segment Tree Query.java Medium Java [Binary Tree, DFS, Divide and Conquer, Segment Tree] 353 Segment Tree Modify.java Medium Java [Binary Tree, DFS, Divide and Conquer, Segment Tree] 354 Segment Tree Query II.java Medium Java [Binary Tree, DFS, Divide and Conquer, Segment Tree] 355 Count of Smaller Numbers After Self.java Review Java [BST, Binary Indexed Tree, Binary Search, Divide and Conquer, Segment Tree] 356 ColorGrid.java Medium Java [Design, Hash Table] 357 Container With Most Water.java Medium Java [Array, Two Pointers] 358 Convert Binary Search Tree to Doubly Linked List.java Medium Java [Linked List, Tree] 359 Copy List with Random Pointer.java Medium Java [Hash Table, Linked List] 360 Encode and Decode Strings.java Medium Java [String] 361 Fast Power.java Medium Java [DFS, Divide and Conquer] 362 Find the Connected Component in the Undirected Graph.java Medium Java [BFS, DFS] 363 HashWithCustomizedClass(LinkedList).java Medium Java [Hash Table] 364 Interval Minimum Number.java Medium Java [Binary Search, Divide and Conquer, Segment Tree] 365 Interval Sum.java Medium Java [Binary Search, Segment Tree] 366 Kth Smallest Element in a BST.java Medium Java [BST, DFS, Stack, Tree] 367 Longest Common Prefix.java Easy Java [String] 368 Majority Element II.java Medium Java [Array] 369 Merge k Sorted Lists.java Medium Java [Divide and Conquer, Heap, Linked List, PriorityQueue] 370 Merge k Sorted Arrays.java Medium Java [Heap, PriorityQueue] 371 Permutations.java Medium Java [Backtracking, DFS, Permutation] 372 Partition List.java Medium Java [Linked List, Two Pointers] 373 Peeking Iterator.java Medium Java [Design] 374 Rehashing.java Medium Java [Hash Table] 375 Reorder List.java Medium Java [Linked List] 376 Restore IP Addresses.java Medium Java [Backtracking, DFS, String] 377 Reverse Words in a String.java Medium Java [String] 378 Reverse Words in a String II.java Medium Java [String] 379 Reverse Words in a String III.java Easy Java [String] 380 Search a 2D Matrix.java Medium Java [Array, Binary Search] 381 Search a 2D Matrix II.java Medium Java [Binary Search, Divide and Conquer] 382 Search for a Range.java Medium Java [Array, Binary Search] 383 Search Range in Binary Search Tree .java Medium Java [BST, Binary Tree] 384 Merge Sorted Array II.java Easy Java [Array] 385 Nth to Last Node in List.java Easy Java [Linked List] 386 Unique Characters.java Easy Java [Array, String] 387 Sort List.java Medium Java [Divide and Conquer, Linked List, Merge Sort, Sort] 388 Summary Ranges.java Medium Java [Array] 389 Top K Frequent Elements.java Medium Java [Hash Table, Heap, PriorityQueue] 390 Topological Sorting.java Medium Java [BFS, DFS, Topological Sort] 391 Median of two Sorted Arrays.java Hard Java [Array, Binary Search, DFS, Divide and Conquer] 392 Remove Duplicate Letters.java Hard Java [Greedy, Hash Table, Stack] 393 Spiral Matrix.java Medium Java [Array, Enumeration] 394 Expression Add Operators.java Hard Java [Backtracking, DFS, Divide and Conquer, String] 395 Insert Interval.java Hard Java [Array, PriorityQueue, Sort] 396 Shortest Palindrome.java Hard Java [KMP, String] 397 2 Sum.java Easy Java [Array, Hash Table] 398 K Empty Slots.java Hard Java [Array, BST, TreeSet] 399 Count of Range Sum.java Hard Java [BST, Divide and Conquer, Merge Sort, PreSum] 400 Max Sum of Rectangle No Larger Than K.java Hard Java [Array, BST, Binary Search, DP, Queue, TreeSet] 401 Perfect Rectangle.java Hard Java [Design, Geometry, Hash Table] 402 Construct Binary Tree from Inorder and Postorder Traversal.java Medium Java [Array, DFS, Divide and Conquer, Tree] 403 Generate Parentheses.java Medium Java [Backtracking, DFS, Sequence DFS, String] 404 Strobogrammatic Number II.java Medium Java [DFS, Math, Sequence DFS] 405 Alien Dictionary.java Hard Java [BFS, Backtracking, DFS, Graph, Topological Sort] 406 Flip Game II.java Medium Java [DFS, DP, backtracking] 407 Max Area of Island.java Easy Java [Array, DFS] 408 Max Points on a Line.java Hard Java [Array, Geometry, Hash Table, Math] 409 Number of Digit One.java Hard Java [Math] 410 Binary Representation.java Hard Java [Bit Manipulation, String] 411 Palindrome Partitioning.java Medium Java [Backtracking, DFS] 412 Graph Valid Tree.java Medium Java [BFS, DFS, Graph, Union Find] 413 Recover Binary Search Tree.java Hard Java [BST, DFS, Tree] 414 Subarray Sum.java Easy Java [Array, Hash Table] 415 Submatrix Sum.java Medium Java [Array, Hash Table, PreSum] 416 Longest Palindromic Substring.java Medium Java [DP, String] 417 Longest Palindromic Subsequence.java Medium Java [DFS, DP, Interval DP, Memoization] 418 Jump Game II.java Hard Java [Array, Coordinate DP, DP, Greedy] 419 Gas Station.java Medium Java [Greedy] 420 Triangles.java Medium Java [Array, Coordinate DP, DFS, DP, Memoization] 421 Range Sum Query - Immutable.java Easy Java [DP, PreSum] 422 Longest Valid Parentheses.java Hard Java [Coordinate DP, Stack, String] 423 Remove Invalid Parentheses.java Review Java [BFS, DFS, DP] 424 Paint Fence.java Easy Java [DP, Sequence DP] 425 Merge Intervals.java Medium Java [Array, PriorityQueue, Sort, Sweep Line] 426 H-Index.java Medium Java [Bucket Sort, Hash Table, Sort] 427 H-Index II.java Medium Java [Binary Search] 428 Sort Color.java Medium Java [Array, Partition, Sort, Two Pointers] 429 Sort Colors II.java Medium Java [Partition, Sort, Two Pointers] 430 Sort Letters by Case.java Medium Java [Partition, Sort, String, Two Pointers] 431 Subarray Sum Closest.java Medium Java [PreSum, Sort]