LeetCode Top 100 Liked Problems
LeetCode Top 100 Liked Problems
Source: https://leetcode.com/studyplan/top-100-liked/
Total: 100 problems | Easy: 27 | Medium: 61 | Hard: 12
Backtracking
| # | Problem | Difficulty |
|---|---|---|
| 17 | Letter Combinations of a Phone Number | Medium |
| 22 | Generate Parentheses | Medium |
| 39 | Combination Sum | Medium |
| 46 | Permutations | Medium |
| 51 | N-Queens | Hard |
| 78 | Subsets | Medium |
| 79 | Word Search | Medium |
| 131 | Palindrome Partitioning | Medium |
Binary Search
| # | Problem | Difficulty |
|---|---|---|
| 4 | Median of Two Sorted Arrays | Hard |
| 33 | Search in Rotated Sorted Array | Medium |
| 34 | Find First and Last Position of Element in Sorted Array | Medium |
| 35 | Search Insert Position | Easy |
| 74 | Search a 2D Matrix | Medium |
| 124 | Binary Tree Maximum Path Sum | Hard |
| 153 | Find Minimum in Rotated Sorted Array | Medium |
Binary Tree
| # | Problem | Difficulty |
|---|---|---|
| 94 | Binary Tree Inorder Traversal | Easy |
| 98 | Validate Binary Search Tree | Medium |
| 101 | Symmetric Tree | Easy |
| 102 | Binary Tree Level Order Traversal | Medium |
| 104 | Maximum Depth of Binary Tree | Easy |
| 105 | Construct Binary Tree from Preorder and Inorder Traversal | Medium |
| 108 | Convert Sorted Array to Binary Search Tree | Easy |
| 114 | Flatten Binary Tree to Linked List | Medium |
| 199 | Binary Tree Right Side View | Medium |
| 226 | Invert Binary Tree | Easy |
| 230 | Kth Smallest Element in a BST | Medium |
| 236 | Lowest Common Ancestor of a Binary Tree | Medium |
| 437 | Path Sum III | Medium |
| 543 | Diameter of Binary Tree | Easy |
Dynamic Programming
| # | Problem | Difficulty |
|---|---|---|
| 5 | Longest Palindromic Substring | Medium |
| 32 | Longest Valid Parentheses | Hard |
| 62 | Unique Paths | Medium |
| 64 | Minimum Path Sum | Medium |
| 70 | Climbing Stairs | Easy |
| 72 | Edit Distance | Medium |
| 118 | Pascal’s Triangle | Easy |
| 139 | Word Break | Medium |
| 152 | Maximum Product Subarray | Medium |
| 198 | House Robber | Medium |
| 279 | Perfect Squares | Medium |
| 300 | Longest Increasing Subsequence | Medium |
| 322 | Coin Change | Medium |
| 416 | Partition Equal Subset Sum | Medium |
| 1143 | Longest Common Subsequence | Medium |
Graph
| # | Problem | Difficulty |
|---|---|---|
| 200 | Number of Islands | Medium |
| 207 | Course Schedule | Medium |
| 994 | Rotting Oranges | Medium |
Greedy
| # | Problem | Difficulty |
|---|---|---|
| 45 | Jump Game II | Medium |
| 55 | Jump Game | Medium |
| 121 | Best Time to Buy and Sell Stock | Easy |
| 763 | Partition Labels | Medium |
Hashing
| # | Problem | Difficulty |
|---|---|---|
| 1 | Two Sum | Easy |
| 49 | Group Anagrams | Medium |
| 128 | Longest Consecutive Sequence | Medium |
| 560 | Subarray Sum Equals K | Medium |
Heap
| # | Problem | Difficulty |
|---|---|---|
| 215 | Kth Largest Element in an Array | Medium |
| 295 | Find Median from Data Stream | Hard |
| 347 | Top K Frequent Elements | Medium |
Linked Lists
| # | Problem | Difficulty |
|---|---|---|
| 2 | Add Two Numbers | Medium |
| 19 | Remove Nth Node From End of List | Medium |
| 21 | Merge Two Sorted Lists | Easy |
| 23 | Merge k Sorted Lists | Hard |
| 24 | Swap Nodes in Pairs | Medium |
| 25 | Reverse Nodes in k-Group | Hard |
| 138 | Copy List with Random Pointer | Medium |
| 141 | Linked List Cycle | Easy |
| 142 | Linked List Cycle II | Medium |
| 146 | LRU Cache | Medium |
| 148 | Sort List | Medium |
| 160 | Intersection of Two Linked Lists | Easy |
| 206 | Reverse Linked List | Easy |
| 234 | Palindrome Linked List | Easy |
Matrix
| # | Problem | Difficulty |
|---|---|---|
| 48 | Rotate Image | Medium |
| 54 | Spiral Matrix | Medium |
| 73 | Set Matrix Zeroes | Medium |
| 240 | Search a 2D Matrix II | Medium |
Sliding Window
| # | Problem | Difficulty |
|---|---|---|
| 3 | Longest Substring Without Repeating Characters | Medium |
| 76 | Minimum Window Substring | Hard |
| 239 | Sliding Window Maximum | Hard |
| 438 | Find All Anagrams in a String | Medium |
Stack
| # | Problem | Difficulty |
|---|---|---|
| 20 | Valid Parentheses | Easy |
| 84 | Largest Rectangle in Histogram | Hard |
| 155 | Min Stack | Medium |
| 394 | Decode String | Medium |
| 739 | Daily Temperatures | Medium |
Two Pointers
| # | Problem | Difficulty |
|---|---|---|
| 11 | Container With Most Water | Medium |
| 15 | 3Sum | Medium |
| 42 | Trapping Rain Water | Hard |
| 283 | Move Zeroes | Easy |
Trie
| # | Problem | Difficulty |
|---|---|---|
| 208 | Implement Trie (Prefix Tree) | Medium |
Miscellaneous
| # | Problem | Difficulty |
|---|---|---|
| 31 | Next Permutation | Medium |
| 41 | First Missing Positive | Hard |
| 53 | Maximum Subarray | Medium |
| 56 | Merge Intervals | Medium |
| 75 | Sort Colors | Medium |
| 136 | Single Number | Easy |
| 169 | Majority Element | Easy |
| 189 | Rotate Array | Medium |
| 238 | Product of Array Except Self | Medium |
| 287 | Find the Duplicate Number | Medium |
Backtracking
17. Letter Combinations of a Phone Number Medium
Given a string containing digits from 2-9 inclusive, return all possible letter combinations that the number could represent. Return the answer in any order.
A mapping of digits to letters (just like on the telephone buttons) is given below. Note that 1 does not map to any letters.
Example 1:
1 | Input: digits = "23" |
Example 2:
1 | Input: digits = "2" |
Constraints:
- `1 <= digits.length <= 4`
- `digits[i]` is a digit in the range `['2', '9']`.
22. Generate Parentheses Medium
Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.
Example 1:
1 | Input: n = 3 |
Example 2:
1 | Input: n = 1 |
Constraints:
- `1 <= n <= 8`
39. Combination Sum Medium
Given an array of distinct integers candidates and a target integer target, return a list of all unique combinations of candidates where the chosen numbers sum to target. You may return the combinations in any order.
The same number may be chosen from candidates an unlimited number of times. Two combinations are unique if the frequency of at least one of the chosen numbers is different.
The test cases are generated such that the number of unique combinations that sum up to target is less than 150 combinations for the given input.
Example 1:
1 | Input: candidates = [2,3,6,7], target = 7 |
Example 2:
1 | Input: candidates = [2,3,5], target = 8 |
Example 3:
1 | Input: candidates = [2], target = 1 |
Constraints:
- `1 <= candidates.length <= 30`
- `2 <= candidates[i] <= 40`
- All elements of `candidates` are **distinct**.
- `1 <= target <= 40`
46. Permutations Medium
Given an array nums of distinct integers, return all the possible permutations. You can return the answer in any order.
Example 1:
1 | Input: nums = [1,2,3] |
Example 2:
1 | Input: nums = [0,1] |
Example 3:
1 | Input: nums = [1] |
Constraints:
- `1 <= nums.length <= 6`
- `-10 <= nums[i] <= 10`
- All the integers of `nums` are **unique**.
51. N-Queens Hard
The n-queens puzzle is the problem of placing n queens on an n x n chessboard such that no two queens attack each other.
Given an integer n, return all distinct solutions to the n-queens puzzle. You may return the answer in any order.
Each solution contains a distinct board configuration of the n-queens’ placement, where 'Q' and '.' both indicate a queen and an empty space, respectively.
Example 1:
1 | Input: n = 4 |
Example 2:
1 | Input: n = 1 |
Constraints:
- `1 <= n <= 9`
78. Subsets Medium
Given an integer array nums of unique elements, return all possible subsets (the power set).
The solution set must not contain duplicate subsets. Return the solution in any order.
Example 1:
1 | Input: nums = [1,2,3] |
Example 2:
1 | Input: nums = [0] |
Constraints:
- `1 <= nums.length <= 10`
- `-10 <= nums[i] <= 10`
- All the numbers of `nums` are **unique**.
79. Word Search Medium
Given an m x n grid of characters board and a string word, return true if word exists in the grid.
The word can be constructed from letters of sequentially adjacent cells, where adjacent cells are horizontally or vertically neighboring. The same letter cell may not be used more than once.
Example 1:
1 | Input: board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]], word = "ABCCED" |
Example 2:
1 | Input: board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]], word = "SEE" |
Example 3:
1 | Input: board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]], word = "ABCB" |
Constraints:
- `m == board.length`
- `n = board[i].length`
- `1 <= m, n <= 6`
- `1 <= word.length <= 15`
- `board` and `word` consists of only lowercase and uppercase English letters.
Follow up: Could you use search pruning to make your solution faster with a larger board?
131. Palindrome Partitioning Medium
Given a string s, partition s such that every substring of the partition is a palindrome. Return _all possible palindrome partitioning of _s.
Example 1:
1 | Input: s = "aab" |
Example 2:
1 | Input: s = "a" |
Constraints:
- `1 <= s.length <= 16`
- `s` contains only lowercase English letters.
Binary Search
4. Median of Two Sorted Arrays Hard
Given two sorted arrays nums1 and nums2 of size m and n respectively, return the median of the two sorted arrays.
The overall run time complexity should be O(log (m+n)).
Example 1:
1 | Input: nums1 = [1,3], nums2 = [2] |
Example 2:
1 | Input: nums1 = [1,2], nums2 = [3,4] |
Constraints:
- `nums1.length == m`
- `nums2.length == n`
- `0 <= m <= 1000`
- `0 <= n <= 1000`
- `1 <= m + n <= 2000`
- `-10^6 <= nums1[i], nums2[i] <= 10^6`
33. Search in Rotated Sorted Array Medium
There is an integer array nums sorted in ascending order (with distinct values).
Prior to being passed to your function, nums is possibly left rotated at an unknown index k (1 <= k < nums.length) such that the resulting array is [nums[k], nums[k+1], ..., nums[n-1], nums[0], nums[1], ..., nums[k-1]] (0-indexed). For example, [0,1,2,4,5,6,7] might be left rotated by 3 indices and become [4,5,6,7,0,1,2].
Given the array nums after the possible rotation and an integer target, return _the index of target if it is in nums, or -1 if it is not in _nums.
You must write an algorithm with O(log n) runtime complexity.
Example 1:
1 | Input: nums = [4,5,6,7,0,1,2], target = 0 |
Example 2:
1 | Input: nums = [4,5,6,7,0,1,2], target = 3 |
Example 3:
1 | Input: nums = [1], target = 0 |
Constraints:
- `1 <= nums.length <= 5000`
- `-10^4 <= nums[i] <= 10^4`
- All values of `nums` are **unique**.
- `nums` is an ascending array that is possibly rotated.
- `-10^4 <= target <= 10^4`
34. Find First and Last Position of Element in Sorted Array Medium
Given an array of integers nums sorted in non-decreasing order, find the starting and ending position of a given target value.
If target is not found in the array, return [-1, -1].
You must write an algorithm with O(log n) runtime complexity.
Example 1:
1 | Input: nums = [5,7,7,8,8,10], target = 8 |
Example 2:
1 | Input: nums = [5,7,7,8,8,10], target = 6 |
Example 3:
1 | Input: nums = [], target = 0 |
Constraints:
- `0 <= nums.length <= 10^5`
- `-10^9 <= nums[i] <= 10^9`
- `nums` is a non-decreasing array.
- `-10^9 <= target <= 10^9`
35. Search Insert Position Easy
Given a sorted array of distinct integers and a target value, return the index if the target is found. If not, return the index where it would be if it were inserted in order.
You must write an algorithm with O(log n) runtime complexity.
Example 1:
1 | Input: nums = [1,3,5,6], target = 5 |
Example 2:
1 | Input: nums = [1,3,5,6], target = 2 |
Example 3:
1 | Input: nums = [1,3,5,6], target = 7 |
Constraints:
- `1 <= nums.length <= 10^4`
- `-10^4 <= nums[i] <= 10^4`
- `nums` contains **distinct** values sorted in **ascending** order.
- `-10^4 <= target <= 10^4`
74. Search a 2D Matrix Medium
You are given an m x n integer matrix matrix with the following two properties:
- Each row is sorted in non-decreasing order.
- The first integer of each row is greater than the last integer of the previous row.
Given an integer target, return true if target is in matrix or false otherwise.
You must write a solution in O(log(m * n)) time complexity.
Example 1:
1 | Input: matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 3 |
Example 2:
1 | Input: matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 13 |
Constraints:
- `m == matrix.length`
- `n == matrix[i].length`
- `1 <= m, n <= 100`
- `-10^4 <= matrix[i][j], target <= 10^4`
124. Binary Tree Maximum Path Sum Hard
A path in a binary tree is a sequence of nodes where each pair of adjacent nodes in the sequence has an edge connecting them. A node can only appear in the sequence at most once. Note that the path does not need to pass through the root.
The path sum of a path is the sum of the node’s values in the path.
Given the root of a binary tree, return the maximum path sum of any non-empty path.
Example 1:
1 | Input: root = [1,2,3] |
Example 2:
1 | Input: root = [-10,9,20,null,null,15,7] |
Constraints:
- The number of nodes in the tree is in the range `[1, 3 * 10^4]`.
- `-1000 <= Node.val <= 1000`
153. Find Minimum in Rotated Sorted Array Medium
Suppose an array of length n sorted in ascending order is rotated between 1 and n times. For example, the array nums = [0,1,2,4,5,6,7] might become:
- `[4,5,6,7,0,1,2]` if it was rotated `4` times.
- `[0,1,2,4,5,6,7]` if it was rotated `7` times.
Notice that rotating an array [a[0], a[1], a[2], ..., a[n-1]] 1 time results in the array [a[n-1], a[0], a[1], a[2], ..., a[n-2]].
Given the sorted rotated array nums of unique elements, return the minimum element of this array.
You must write an algorithm that runs in O(log n) time.
Example 1:
1 | Input: nums = [3,4,5,1,2] |
Example 2:
1 | Input: nums = [4,5,6,7,0,1,2] |
Example 3:
1 | Input: nums = [11,13,15,17] |
Constraints:
- `n == nums.length`
- `1 <= n <= 5000`
- `-5000 <= nums[i] <= 5000`
- All the integers of `nums` are **unique**.
- `nums` is sorted and rotated between `1` and `n` times.
Binary Tree
94. Binary Tree Inorder Traversal Easy
Given the root of a binary tree, return the inorder traversal of its nodes’ values.
Example 1:
Input: root = [1,null,2,3]
Output: [1,3,2]
Explanation:
Example 2:
Input: root = [1,2,3,4,5,null,8,null,null,6,7,9]
Output: [4,2,6,5,7,1,3,9,8]
Explanation:
Example 3:
Input: root = []
Output: []
Example 4:
Input: root = [1]
Output: [1]
Constraints:
- The number of nodes in the tree is in the range `[0, 100]`.
- `-100 <= Node.val <= 100`
Follow up: Recursive solution is trivial, could you do it iteratively?
98. Validate Binary Search Tree Medium
Given the root of a binary tree, determine if it is a valid binary search tree (BST).
A valid BST is defined as follows:
- The left subtree of a node contains only nodes with keys **strictly less than** the node's key.
- The right subtree of a node contains only nodes with keys **strictly greater than** the node's key.
- Both the left and right subtrees must also be binary search trees.
Example 1:
1 | Input: root = [2,1,3] |
Example 2:
1 | Input: root = [5,1,4,null,null,3,6] |
Constraints:
- The number of nodes in the tree is in the range `[1, 10^4]`.
- `-2^31 <= Node.val <= 2^31 - 1`
101. Symmetric Tree Easy
Given the root of a binary tree, check whether it is a mirror of itself (i.e., symmetric around its center).
Example 1:
1 | Input: root = [1,2,2,3,4,4,3] |
Example 2:
1 | Input: root = [1,2,2,null,3,null,3] |
Constraints:
- The number of nodes in the tree is in the range `[1, 1000]`.
- `-100 <= Node.val <= 100`
Follow up: Could you solve it both recursively and iteratively?
102. Binary Tree Level Order Traversal Medium
Given the root of a binary tree, return the level order traversal of its nodes’ values. (i.e., from left to right, level by level).
Example 1:
1 | Input: root = [3,9,20,null,null,15,7] |
Example 2:
1 | Input: root = [1] |
Example 3:
1 | Input: root = [] |
Constraints:
- The number of nodes in the tree is in the range `[0, 2000]`.
- `-1000 <= Node.val <= 1000`
104. Maximum Depth of Binary Tree Easy
Given the root of a binary tree, return its maximum depth.
A binary tree’s maximum depth is the number of nodes along the longest path from the root node down to the farthest leaf node.
Example 1:
1 | Input: root = [3,9,20,null,null,15,7] |
Example 2:
1 | Input: root = [1,null,2] |
Constraints:
- The number of nodes in the tree is in the range `[0, 10^4]`.
- `-100 <= Node.val <= 100`
105. Construct Binary Tree from Preorder and Inorder Traversal Medium
Given two integer arrays preorder and inorder where preorder is the preorder traversal of a binary tree and inorder is the inorder traversal of the same tree, construct and return the binary tree.
Example 1:
1 | Input: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7] |
Example 2:
1 | Input: preorder = [-1], inorder = [-1] |
Constraints:
- `1 <= preorder.length <= 3000`
- `inorder.length == preorder.length`
- `-3000 <= preorder[i], inorder[i] <= 3000`
- `preorder` and `inorder` consist of **unique** values.
- Each value of `inorder` also appears in `preorder`.
- `preorder` is **guaranteed** to be the preorder traversal of the tree.
- `inorder` is **guaranteed** to be the inorder traversal of the tree.
108. Convert Sorted Array to Binary Search Tree Easy
Given an integer array nums where the elements are sorted in ascending order, convert _it to a _height-balanced binary search tree.
Example 1:
1 | Input: nums = [-10,-3,0,5,9] |
Example 2:
1 | Input: nums = [1,3] |
Constraints:
- `1 <= nums.length <= 10^4`
- `-10^4 <= nums[i] <= 10^4`
- `nums` is sorted in a **strictly increasing** order.
114. Flatten Binary Tree to Linked List Medium
Given the root of a binary tree, flatten the tree into a “linked list”:
- The "linked list" should use the same `TreeNode` class where the `right` child pointer points to the next node in the list and the `left` child pointer is always `null`.
- The "linked list" should be in the same order as a **pre-order**** traversal** of the binary tree.
Example 1:
1 | Input: root = [1,2,5,3,4,null,6] |
Example 2:
1 | Input: root = [] |
Example 3:
1 | Input: root = [0] |
Constraints:
- The number of nodes in the tree is in the range `[0, 2000]`.
- `-100 <= Node.val <= 100`
Follow up: Can you flatten the tree in-place (with O(1) extra space)?
199. Binary Tree Right Side View Medium
Given the root of a binary tree, imagine yourself standing on the right side of it, return the values of the nodes you can see ordered from top to bottom.
Example 1:
Input: root = [1,2,3,null,5,null,4]
Output: [1,3,4]
Explanation:
Example 2:
Input: root = [1,2,3,4,null,null,null,5]
Output: [1,3,4,5]
Explanation:
Example 3:
Input: root = [1,null,3]
Output: [1,3]
Example 4:
Input: root = []
Output: []
Constraints:
- The number of nodes in the tree is in the range `[0, 100]`.
- `-100 <= Node.val <= 100`
226. Invert Binary Tree Easy
Given the root of a binary tree, invert the tree, and return its root.
Example 1:
1 | Input: root = [4,2,7,1,3,6,9] |
Example 2:
1 | Input: root = [2,1,3] |
Example 3:
1 | Input: root = [] |
Constraints:
- The number of nodes in the tree is in the range `[0, 100]`.
- `-100 <= Node.val <= 100`
230. Kth Smallest Element in a BST Medium
Given the root of a binary search tree, and an integer k, return the k^th smallest value (1-indexed) of all the values of the nodes in the tree.
Example 1:
1 | Input: root = [3,1,4,null,2], k = 1 |
Example 2:
1 | Input: root = [5,3,6,2,4,null,null,1], k = 3 |
Constraints:
- The number of nodes in the tree is `n`.
- `1 <= k <= n <= 10^4`
- `0 <= Node.val <= 10^4`
Follow up: If the BST is modified often (i.e., we can do insert and delete operations) and you need to find the kth smallest frequently, how would you optimize?
236. Lowest Common Ancestor of a Binary Tree Medium
Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree.
According to the definition of LCA on Wikipedia: “The lowest common ancestor is defined between two nodes p and q as the lowest node in T that has both p and q as descendants (where we allow a node to be a descendant of itself).”
Example 1:
1 | Input: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1 |
Example 2:
1 | Input: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 4 |
Example 3:
1 | Input: root = [1,2], p = 1, q = 2 |
Constraints:
- The number of nodes in the tree is in the range `[2, 10^5]`.
- `-10^9 <= Node.val <= 10^9`
- All `Node.val` are **unique**.
- `p != q`
- `p` and `q` will exist in the tree.
437. Path Sum III Medium
Given the root of a binary tree and an integer targetSum, return the number of paths where the sum of the values along the path equals targetSum.
The path does not need to start or end at the root or a leaf, but it must go downwards (i.e., traveling only from parent nodes to child nodes).
Example 1:
1 | Input: root = [10,5,-3,3,2,null,11,3,-2,null,1], targetSum = 8 |
Example 2:
1 | Input: root = [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum = 22 |
Constraints:
- The number of nodes in the tree is in the range `[0, 1000]`.
- `-10^9 <= Node.val <= 10^9`
- `-1000 <= targetSum <= 1000`
543. Diameter of Binary Tree Easy
Given the root of a binary tree, return the length of the diameter of the tree.
The diameter of a binary tree is the length of the longest path between any two nodes in a tree. This path may or may not pass through the root.
The length of a path between two nodes is represented by the number of edges between them.
Example 1:
1 | Input: root = [1,2,3,4,5] |
Example 2:
1 | Input: root = [1,2] |
Constraints:
- The number of nodes in the tree is in the range `[1, 10^4]`.
- `-100 <= Node.val <= 100`
Dynamic Programming
5. Longest Palindromic Substring Medium
Given a string s, return the longest palindromic substring in s.
Example 1:
1 | Input: s = "babad" |
Example 2:
1 | Input: s = "cbbd" |
Constraints:
- `1 <= s.length <= 1000`
- `s` consist of only digits and English letters.
32. Longest Valid Parentheses Hard
Given a string containing just the characters '(' and ')', return _the length of the longest valid (well-formed) parentheses _substring.
Example 1:
1 | Input: s = "(()" |
Example 2:
1 | Input: s = ")()())" |
Example 3:
1 | Input: s = "" |
Constraints:
- `0 <= s.length <= 3 * 10^4`
- `s[i]` is `'('`, or `')'`.
62. Unique Paths Medium
There is a robot on an m x n grid. The robot is initially located at the top-left corner (i.e., grid[0][0]). The robot tries to move to the bottom-right corner (i.e., grid[m - 1][n - 1]). The robot can only move either down or right at any point in time.
Given the two integers m and n, return the number of possible unique paths that the robot can take to reach the bottom-right corner.
The test cases are generated so that the answer will be less than or equal to 2 * 10^9.
Example 1:
1 | Input: m = 3, n = 7 |
Example 2:
1 | Input: m = 3, n = 2 |
Constraints:
- `1 <= m, n <= 100`
64. Minimum Path Sum Medium
Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right, which minimizes the sum of all numbers along its path.
Note: You can only move either down or right at any point in time.
Example 1:
1 | Input: grid = [[1,3,1],[1,5,1],[4,2,1]] |
Example 2:
1 | Input: grid = [[1,2,3],[4,5,6]] |
Constraints:
- `m == grid.length`
- `n == grid[i].length`
- `1 <= m, n <= 200`
- `0 <= grid[i][j] <= 200`
70. Climbing Stairs Easy
You are climbing a staircase. It takes n steps to reach the top.
Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?
Example 1:
1 | Input: n = 2 |
Example 2:
1 | Input: n = 3 |
Constraints:
- `1 <= n <= 45`
72. Edit Distance Medium
Given two strings word1 and word2, return the minimum number of operations required to convert word1 to word2.
You have the following three operations permitted on a word:
- Insert a character
- Delete a character
- Replace a character
Example 1:
1 | Input: word1 = "horse", word2 = "ros" |
Example 2:
1 | Input: word1 = "intention", word2 = "execution" |
Constraints:
- `0 <= word1.length, word2.length <= 500`
- `word1` and `word2` consist of lowercase English letters.
118. Pascal’s Triangle Easy
Given an integer numRows, return the first numRows of Pascal’s triangle.
In Pascal’s triangle, each number is the sum of the two numbers directly above it as shown:
Example 1:
1 | Input: numRows = 5 |
Example 2:
1 | Input: numRows = 1 |
Constraints:
- `1 <= numRows <= 30`
139. Word Break Medium
Given a string s and a dictionary of strings wordDict, return true if s can be segmented into a space-separated sequence of one or more dictionary words.
Note that the same word in the dictionary may be reused multiple times in the segmentation.
Example 1:
1 | Input: s = "leetcode", wordDict = ["leet","code"] |
Example 2:
1 | Input: s = "applepenapple", wordDict = ["apple","pen"] |
Example 3:
1 | Input: s = "catsandog", wordDict = ["cats","dog","sand","and","cat"] |
Constraints:
- `1 <= s.length <= 300`
- `1 <= wordDict.length <= 1000`
- `1 <= wordDict[i].length <= 20`
- `s` and `wordDict[i]` consist of only lowercase English letters.
- All the strings of `wordDict` are **unique**.
152. Maximum Product Subarray Medium
Given an integer array nums, find a subarray that has the largest product, and return the product.
The test cases are generated so that the answer will fit in a 32-bit integer.
Note that the product of an array with a single element is the value of that element.
Example 1:
1 | Input: nums = [2,3,-2,4] |
Example 2:
1 | Input: nums = [-2,0,-1] |
Constraints:
- `1 <= nums.length <= 2 * 10^4`
- `-10 <= nums[i] <= 10`
- The product of any subarray of `nums` is **guaranteed** to fit in a **32-bit** integer.
198. House Robber Medium
You are a professional robber planning to rob houses along a street. Each house has a certain amount of money stashed, the only constraint stopping you from robbing each of them is that adjacent houses have security systems connected and it will automatically contact the police if two adjacent houses were broken into on the same night.
Given an integer array nums representing the amount of money of each house, return the maximum amount of money you can rob tonight without alerting the police.
Example 1:
1 | Input: nums = [1,2,3,1] |
Example 2:
1 | Input: nums = [2,7,9,3,1] |
Constraints:
- `1 <= nums.length <= 100`
- `0 <= nums[i] <= 400`
279. Perfect Squares Medium
Given an integer n, return the least number of perfect square numbers that sum to n.
A perfect square is an integer that is the square of an integer; in other words, it is the product of some integer with itself. For example, 1, 4, 9, and 16 are perfect squares while 3 and 11 are not.
Example 1:
1 | Input: n = 12 |
Example 2:
1 | Input: n = 13 |
Constraints:
- `1 <= n <= 10^4`
300. Longest Increasing Subsequence Medium
Given an integer array nums, return the length of the longest **strictly increasing **__subsequence.
Example 1:
1 | Input: nums = [10,9,2,5,3,7,101,18] |
Example 2:
1 | Input: nums = [0,1,0,3,2,3] |
Example 3:
1 | Input: nums = [7,7,7,7,7,7,7] |
Constraints:
- `1 <= nums.length <= 2500`
- `-10^4 <= nums[i] <= 10^4`
Follow up: Can you come up with an algorithm that runs in O(n log(n)) time complexity?
322. Coin Change Medium
You are given an integer array coins representing coins of different denominations and an integer amount representing a total amount of money.
Return the fewest number of coins that you need to make up that amount. If that amount of money cannot be made up by any combination of the coins, return -1.
You may assume that you have an infinite number of each kind of coin.
Example 1:
1 | Input: coins = [1,2,5], amount = 11 |
Example 2:
1 | Input: coins = [2], amount = 3 |
Example 3:
1 | Input: coins = [1], amount = 0 |
Constraints:
- `1 <= coins.length <= 12`
- `1 <= coins[i] <= 2^31 - 1`
- `0 <= amount <= 10^4`
416. Partition Equal Subset Sum Medium
Given an integer array nums, return true if you can partition the array into two subsets such that the sum of the elements in both subsets is equal or false otherwise.
Example 1:
1 | Input: nums = [1,5,11,5] |
Example 2:
1 | Input: nums = [1,2,3,5] |
Constraints:
- `1 <= nums.length <= 200`
- `1 <= nums[i] <= 100`
1143. Longest Common Subsequence Medium
Given two strings text1 and text2, return _the length of their longest common subsequence. _If there is no common subsequence, return 0.
A subsequence of a string is a new string generated from the original string with some characters (can be none) deleted without changing the relative order of the remaining characters.
- For example, `"ace"` is a subsequence of `"abcde"`.
A common subsequence of two strings is a subsequence that is common to both strings.
Example 1:
1 | Input: text1 = "abcde", text2 = "ace" |
Example 2:
1 | Input: text1 = "abc", text2 = "abc" |
Example 3:
1 | Input: text1 = "abc", text2 = "def" |
Constraints:
- `1 <= text1.length, text2.length <= 1000`
- `text1` and `text2` consist of only lowercase English characters.
Graph
200. Number of Islands Medium
Given an m x n 2D binary grid grid which represents a map of '1's (land) and '0's (water), return the number of islands.
An island is surrounded by water and is formed by connecting adjacent lands horizontally or vertically. You may assume all four edges of the grid are all surrounded by water.
Example 1:
1 | Input: grid = [ |
Example 2:
1 | Input: grid = [ |
Constraints:
- `m == grid.length`
- `n == grid[i].length`
- `1 <= m, n <= 300`
- `grid[i][j]` is `'0'` or `'1'`.
207. Course Schedule Medium
There are a total of numCourses courses you have to take, labeled from 0 to numCourses - 1. You are given an array prerequisites where prerequisites[i] = [ai, bi] indicates that you must take course bi first if you want to take course ai.
- For example, the pair `[0, 1]`, indicates that to take course `0` you have to first take course `1`.
Return true if you can finish all courses. Otherwise, return false.
Example 1:
1 | Input: numCourses = 2, prerequisites = [[1,0]] |
Example 2:
1 | Input: numCourses = 2, prerequisites = [[1,0],[0,1]] |
Constraints:
- `1 i, bi < numCourses`
- All the pairs prerequisites[i] are **unique**.
994. Rotting Oranges Medium
You are given an m x n grid where each cell can have one of three values:
- `0` representing an empty cell,
- `1` representing a fresh orange, or
- `2` representing a rotten orange.
Every minute, any fresh orange that is 4-directionally adjacent to a rotten orange becomes rotten.
Return the minimum number of minutes that must elapse until no cell has a fresh orange. If this is impossible, return -1.
Example 1:
1 | Input: grid = [[2,1,1],[1,1,0],[0,1,1]] |
Example 2:
1 | Input: grid = [[2,1,1],[0,1,1],[1,0,1]] |
Example 3:
1 | Input: grid = [[0,2]] |
Constraints:
- `m == grid.length`
- `n == grid[i].length`
- `1 <= m, n <= 10`
- `grid[i][j]` is `0`, `1`, or `2`.
Greedy
45. Jump Game II Medium
You are given a 0-indexed array of integers nums of length n. You are initially positioned at index 0.
Each element nums[i] represents the maximum length of a forward jump from index i. In other words, if you are at index i, you can jump to any index (i + j) where:
- `0 <= j <= nums[i]` and
- `i + j < n`
Return _the minimum number of jumps to reach index _n - 1. The test cases are generated such that you can reach index n - 1.
Example 1:
1 | Input: nums = [2,3,1,1,4] |
Example 2:
1 | Input: nums = [2,3,0,1,4] |
Constraints:
- `1 <= nums.length <= 10^4`
- `0 <= nums[i] <= 1000`
- It's guaranteed that you can reach `nums[n - 1]`.
55. Jump Game Medium
You are given an integer array nums. You are initially positioned at the array’s first index, and each element in the array represents your maximum jump length at that position.
Return true_ if you can reach the last index, or false otherwise_.
Example 1:
1 | Input: nums = [2,3,1,1,4] |
Example 2:
1 | Input: nums = [3,2,1,0,4] |
Constraints:
- `1 <= nums.length <= 10^4`
- `0 <= nums[i] <= 10^5`
121. Best Time to Buy and Sell Stock Easy
You are given an array prices where prices[i] is the price of a given stock on the i^th day.
You want to maximize your profit by choosing a single day to buy one stock and choosing a different day in the future to sell that stock.
Return the maximum profit you can achieve from this transaction. If you cannot achieve any profit, return 0.
Example 1:
1 | Input: prices = [7,1,5,3,6,4] |
Example 2:
1 | Input: prices = [7,6,4,3,1] |
Constraints:
- `1 <= prices.length <= 10^5`
- `0 <= prices[i] <= 10^4`
763. Partition Labels Medium
You are given a string s. We want to partition the string into as many parts as possible so that each letter appears in at most one part. For example, the string "ababcc" can be partitioned into ["abab", "cc"], but partitions such as ["aba", "bcc"] or ["ab", "ab", "cc"] are invalid.
Note that the partition is done so that after concatenating all the parts in order, the resultant string should be s.
Return a list of integers representing the size of these parts.
Example 1:
1 | Input: s = "ababcbacadefegdehijhklij" |
Example 2:
1 | Input: s = "eccbbbbdec" |
Constraints:
- `1 <= s.length <= 500`
- `s` consists of lowercase English letters.
Hashing
1. Two Sum Easy
Given an array of integers nums and an integer target, return indices of the two numbers such that they add up to target.
You may assume that each input would have exactly one solution, and you may not use the same element twice.
You can return the answer in any order.
Example 1:
1 | Input: nums = [2,7,11,15], target = 9 |
Example 2:
1 | Input: nums = [3,2,4], target = 6 |
Example 3:
1 | Input: nums = [3,3], target = 6 |
Constraints:
- `2 time complexity?
49. Group Anagrams Medium
Given an array of strings strs, group the anagrams together. You can return the answer in any order.
Example 1:
Input: strs = [“eat”,”tea”,”tan”,”ate”,”nat”,”bat”]
Output: [[“bat”],[“nat”,”tan”],[“ate”,”eat”,”tea”]]
Explanation:
- There is no string in strs that can be rearranged to form `"bat"`.
- The strings `"nat"` and `"tan"` are anagrams as they can be rearranged to form each other.
- The strings `"ate"`, `"eat"`, and `"tea"` are anagrams as they can be rearranged to form each other.
Example 2:
Input: strs = [“”]
Output: [[“”]]
Example 3:
Input: strs = [“a”]
Output: [[“a”]]
Constraints:
- `1 <= strs.length <= 10^4`
- `0 <= strs[i].length <= 100`
- `strs[i]` consists of lowercase English letters.
128. Longest Consecutive Sequence Medium
Given an unsorted array of integers nums, return the length of the longest consecutive elements sequence.
You must write an algorithm that runs in O(n) time.
Example 1:
1 | Input: nums = [100,4,200,1,3,2] |
Example 2:
1 | Input: nums = [0,3,7,2,5,8,4,6,0,1] |
Example 3:
1 | Input: nums = [1,0,1,2] |
Constraints:
- `0 <= nums.length <= 10^5`
- `-10^9 <= nums[i] <= 10^9`
560. Subarray Sum Equals K Medium
Given an array of integers nums and an integer k, return the total number of subarrays whose sum equals to k.
A subarray is a contiguous non-empty sequence of elements within an array.
Example 1:
1 | Input: nums = [1,1,1], k = 2 |
Example 2:
1 | Input: nums = [1,2,3], k = 3 |
Constraints:
- `1 <= nums.length <= 2 * 10^4`
- `-1000 <= nums[i] <= 1000`
- `-10^7 <= k <= 10^7`
Heap
215. Kth Largest Element in an Array Medium
Given an integer array nums and an integer k, return the k^th largest element in the array.
Note that it is the k^th largest element in the sorted order, not the k^th distinct element.
Can you solve it without sorting?
Example 1:
1 | Input: nums = [3,2,1,5,6,4], k = 2 |
Example 2:
1 | Input: nums = [3,2,3,1,2,4,5,5,6], k = 4 |
Constraints:
- `1 <= k <= nums.length <= 10^5`
- `-10^4 <= nums[i] <= 10^4`
295. Find Median from Data Stream Hard
The median is the middle value in an ordered integer list. If the size of the list is even, there is no middle value, and the median is the mean of the two middle values.
- For example, for `arr = [2,3,4]`, the median is `3`.
- For example, for `arr = [2,3]`, the median is `(2 + 3) / 2 = 2.5`.
Implement the MedianFinder class:
- `MedianFinder()` initializes the `MedianFinder` object.
- `void addNum(int num)` adds the integer `num` from the data stream to the data structure.
- `double findMedian()` returns the median of all elements so far. Answers within `10^-5` of the actual answer will be accepted.
Example 1:
1 | Input |
Constraints:
- `-10^5 <= num <= 10^5`
- There will be at least one element in the data structure before calling `findMedian`.
- At most `5 * 10^4` calls will be made to `addNum` and `findMedian`.
Follow up:
- If all integer numbers from the stream are in the range `[0, 100]`, how would you optimize your solution?
- If `99%` of all integer numbers from the stream are in the range `[0, 100]`, how would you optimize your solution?
347. Top K Frequent Elements Medium
Given an integer array nums and an integer k, return the k most frequent elements. You may return the answer in any order.
Example 1:
Input: nums = [1,1,1,2,2,3], k = 2
Output: [1,2]
Example 2:
Input: nums = [1], k = 1
Output: [1]
Example 3:
Input: nums = [1,2,1,2,1,2,3,1,3,2], k = 2
Output: [1,2]
Constraints:
- `1 <= nums.length <= 10^5`
- `-10^4 <= nums[i] <= 10^4`
- `k` is in the range `[1, the number of unique elements in the array]`.
- It is **guaranteed** that the answer is **unique**.
Follow up: Your algorithm’s time complexity must be better than O(n log n), where n is the array’s size.
Linked Lists
2. Add Two Numbers Medium
You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order, and each of their nodes contains a single digit. Add the two numbers and return the sum as a linked list.
You may assume the two numbers do not contain any leading zero, except the number 0 itself.
Example 1:
1 | Input: l1 = [2,4,3], l2 = [5,6,4] |
Example 2:
1 | Input: l1 = [0], l2 = [0] |
Example 3:
1 | Input: l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9] |
Constraints:
- The number of nodes in each linked list is in the range `[1, 100]`.
- `0 <= Node.val <= 9`
- It is guaranteed that the list represents a number that does not have leading zeros.
19. Remove Nth Node From End of List Medium
Given the head of a linked list, remove the n^th node from the end of the list and return its head.
Example 1:
1 | Input: head = [1,2,3,4,5], n = 2 |
Example 2:
1 | Input: head = [1], n = 1 |
Example 3:
1 | Input: head = [1,2], n = 1 |
Constraints:
- The number of nodes in the list is `sz`.
- `1 <= sz <= 30`
- `0 <= Node.val <= 100`
- `1 <= n <= sz`
Follow up: Could you do this in one pass?
21. Merge Two Sorted Lists Easy
You are given the heads of two sorted linked lists list1 and list2.
Merge the two lists into one sorted list. The list should be made by splicing together the nodes of the first two lists.
Return the head of the merged linked list.
Example 1:
1 | Input: list1 = [1,2,4], list2 = [1,3,4] |
Example 2:
1 | Input: list1 = [], list2 = [] |
Example 3:
1 | Input: list1 = [], list2 = [0] |
Constraints:
- The number of nodes in both lists is in the range `[0, 50]`.
- `-100 <= Node.val <= 100`
- Both `list1` and `list2` are sorted in **non-decreasing** order.
23. Merge k Sorted Lists Hard
You are given an array of k linked-lists lists, each linked-list is sorted in ascending order.
Merge all the linked-lists into one sorted linked-list and return it.
Example 1:
1 | Input: lists = [[1,4,5],[1,3,4],[2,6]] |
Example 2:
1 | Input: lists = [] |
Example 3:
1 | Input: lists = [[]] |
Constraints:
- `k == lists.length`
- `0 <= k <= 10^4`
- `0 <= lists[i].length <= 500`
- `-10^4 <= lists[i][j] <= 10^4`
- `lists[i]` is sorted in **ascending order**.
- The sum of `lists[i].length` will not exceed `10^4`.
24. Swap Nodes in Pairs Medium
Given a linked list, swap every two adjacent nodes and return its head. You must solve the problem without modifying the values in the list’s nodes (i.e., only nodes themselves may be changed.)
Example 1:
Input: head = [1,2,3,4]
Output: [2,1,4,3]
Explanation:
Example 2:
Input: head = []
Output: []
Example 3:
Input: head = [1]
Output: [1]
Example 4:
Input: head = [1,2,3]
Output: [2,1,3]
Constraints:
- The number of nodes in the list is in the range `[0, 100]`.
- `0 <= Node.val <= 100`
25. Reverse Nodes in k-Group Hard
Given the head of a linked list, reverse the nodes of the list k at a time, and return the modified list.
k is a positive integer and is less than or equal to the length of the linked list. If the number of nodes is not a multiple of k then left-out nodes, in the end, should remain as it is.
You may not alter the values in the list’s nodes, only nodes themselves may be changed.
Example 1:
1 | Input: head = [1,2,3,4,5], k = 2 |
Example 2:
1 | Input: head = [1,2,3,4,5], k = 3 |
Constraints:
- The number of nodes in the list is `n`.
- `1 <= k <= n <= 5000`
- `0 <= Node.val <= 1000`
Follow-up: Can you solve the problem in O(1) extra memory space?
138. Copy List with Random Pointer Medium
A linked list of length n is given such that each node contains an additional random pointer, which could point to any node in the list, or null.
Construct a deep copy of the list. The deep copy should consist of exactly n brand new nodes, where each new node has its value set to the value of its corresponding original node. Both the next and random pointer of the new nodes should point to new nodes in the copied list such that the pointers in the original list and copied list represent the same list state. None of the pointers in the new list should point to nodes in the original list.
For example, if there are two nodes X and Y in the original list, where X.random --> Y, then for the corresponding two nodes x and y in the copied list, x.random --> y.
Return the head of the copied linked list.
The linked list is represented in the input/output as a list of n nodes. Each node is represented as a pair of [val, random_index] where:
- `val`: an integer representing `Node.val`
- `random_index`: the index of the node (range from `0` to `n-1`) that the `random` pointer points to, or `null` if it does not point to any node.
Your code will only be given the head of the original linked list.
Example 1:
1 | Input: head = [[7,null],[13,0],[11,4],[10,2],[1,0]] |
Example 2:
1 | Input: head = [[1,1],[2,1]] |
Example 3:
1 | Input: head = [[3,null],[3,0],[3,null]] |
Constraints:
- `0 <= n <= 1000`
- `-10^4 <= Node.val <= 10^4`
- `Node.random` is `null` or is pointing to some node in the linked list.
141. Linked List Cycle Easy
Given head, the head of a linked list, determine if the linked list has a cycle in it.
There is a cycle in a linked list if there is some node in the list that can be reached again by continuously following the next pointer. Internally, pos is used to denote the index of the node that tail’s next pointer is connected to. Note that pos is not passed as a parameter.
Return true_ if there is a cycle in the linked list_. Otherwise, return false.
Example 1:
1 | Input: head = [3,2,0,-4], pos = 1 |
Example 2:
1 | Input: head = [1,2], pos = 0 |
Example 3:
1 | Input: head = [1], pos = -1 |
Constraints:
- The number of the nodes in the list is in the range `[0, 10^4]`.
- `-10^5 <= Node.val <= 10^5`
- `pos` is `-1` or a **valid index** in the linked-list.
Follow up: Can you solve it using O(1) (i.e. constant) memory?
142. Linked List Cycle II Medium
Given the head of a linked list, return _the node where the cycle begins. If there is no cycle, return _null.
There is a cycle in a linked list if there is some node in the list that can be reached again by continuously following the next pointer. Internally, pos is used to denote the index of the node that tail’s next pointer is connected to (0-indexed). It is -1 if there is no cycle. Note that pos is not passed as a parameter.
Do not modify the linked list.
Example 1:
1 | Input: head = [3,2,0,-4], pos = 1 |
Example 2:
1 | Input: head = [1,2], pos = 0 |
Example 3:
1 | Input: head = [1], pos = -1 |
Constraints:
- The number of the nodes in the list is in the range `[0, 10^4]`.
- `-10^5 <= Node.val <= 10^5`
- `pos` is `-1` or a **valid index** in the linked-list.
Follow up: Can you solve it using O(1) (i.e. constant) memory?
146. LRU Cache Medium
Design a data structure that follows the constraints of a Least Recently Used (LRU) cache.
Implement the LRUCache class:
- `LRUCache(int capacity)` Initialize the LRU cache with **positive** size `capacity`.
- `int get(int key)` Return the value of the `key` if the key exists, otherwise return `-1`.
- `void put(int key, int value)` Update the value of the `key` if the `key` exists. Otherwise, add the `key-value` pair to the cache. If the number of keys exceeds the `capacity` from this operation, **evict** the least recently used key.
The functions get and put must each run in O(1) average time complexity.
Example 1:
1 | Input |
Constraints:
- `1 <= capacity <= 3000`
- `0 <= key <= 10^4`
- `0 <= value <= 10^5`
- At most `2 * 10^5` calls will be made to `get` and `put`.
148. Sort List Medium
Given the head of a linked list, return the list after sorting it in ascending order.
Example 1:
1 | Input: head = [4,2,1,3] |
Example 2:
1 | Input: head = [-1,5,3,4,0] |
Example 3:
1 | Input: head = [] |
Constraints:
- The number of nodes in the list is in the range `[0, 5 * 10^4]`.
- `-10^5 <= Node.val <= 10^5`
Follow up: Can you sort the linked list in O(n logn) time and O(1) memory (i.e. constant space)?
160. Intersection of Two Linked Lists Easy
Given the heads of two singly linked-lists headA and headB, return the node at which the two lists intersect. If the two linked lists have no intersection at all, return null.
For example, the following two linked lists begin to intersect at node c1:
The test cases are generated such that there are no cycles anywhere in the entire linked structure.
Note that the linked lists must retain their original structure after the function returns.
Custom Judge:
The inputs to the judge are given as follows (your program is not given these inputs):
- `intersectVal` - The value of the node where the intersection occurs. This is `0` if there is no intersected node.
- `listA` - The first linked list.
- `listB` - The second linked list.
- `skipA` - The number of nodes to skip ahead in `listA` (starting from the head) to get to the intersected node.
- `skipB` - The number of nodes to skip ahead in `listB` (starting from the head) to get to the intersected node.
The judge will then create the linked structure based on these inputs and pass the two heads, headA and headB to your program. If you correctly return the intersected node, then your solution will be accepted.
Example 1:
1 | Input: intersectVal = 8, listA = [4,1,8,4,5], listB = [5,6,1,8,4,5], skipA = 2, skipB = 3 |
Example 2:
1 | Input: intersectVal = 2, listA = [1,9,1,2,4], listB = [3,2,4], skipA = 3, skipB = 1 |
Example 3:
1 | Input: intersectVal = 0, listA = [2,6,4], listB = [1,5], skipA = 3, skipB = 2 |
Constraints:
- The number of nodes of `listA` is in the `m`.
- The number of nodes of `listB` is in the `n`.
- `1 <= m, n <= 3 * 10^4`
- `1 <= Node.val <= 10^5`
- `0 <= skipA <= m`
- `0 <= skipB <= n`
- `intersectVal` is `0` if `listA` and `listB` do not intersect.
- `intersectVal == listA[skipA] == listB[skipB]` if `listA` and `listB` intersect.
Follow up: Could you write a solution that runs in O(m + n) time and use only O(1) memory?
206. Reverse Linked List Easy
Given the head of a singly linked list, reverse the list, and return the reversed list.
Example 1:
1 | Input: head = [1,2,3,4,5] |
Example 2:
1 | Input: head = [1,2] |
Example 3:
1 | Input: head = [] |
Constraints:
- The number of nodes in the list is the range `[0, 5000]`.
- `-5000 <= Node.val <= 5000`
Follow up: A linked list can be reversed either iteratively or recursively. Could you implement both?
234. Palindrome Linked List Easy
Given the head of a singly linked list, return true_ if it is a palindrome or false otherwise_.
Example 1:
1 | Input: head = [1,2,2,1] |
Example 2:
1 | Input: head = [1,2] |
Constraints:
- The number of nodes in the list is in the range `[1, 10^5]`.
- `0 <= Node.val <= 9`
Follow up: Could you do it in O(n) time and O(1) space?
Matrix
48. Rotate Image Medium
You are given an n x n 2D matrix representing an image, rotate the image by 90 degrees (clockwise).
You have to rotate the image in-place, which means you have to modify the input 2D matrix directly. DO NOT allocate another 2D matrix and do the rotation.
Example 1:
1 | Input: matrix = [[1,2,3],[4,5,6],[7,8,9]] |
Example 2:
1 | Input: matrix = [[5,1,9,11],[2,4,8,10],[13,3,6,7],[15,14,12,16]] |
Constraints:
- `n == matrix.length == matrix[i].length`
- `1 <= n <= 20`
- `-1000 <= matrix[i][j] <= 1000`
54. Spiral Matrix Medium
Given an m x n matrix, return all elements of the matrix in spiral order.
Example 1:
1 | Input: matrix = [[1,2,3],[4,5,6],[7,8,9]] |
Example 2:
1 | Input: matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]] |
Constraints:
- `m == matrix.length`
- `n == matrix[i].length`
- `1 <= m, n <= 10`
- `-100 <= matrix[i][j] <= 100`
73. Set Matrix Zeroes Medium
Given an m x n integer matrix matrix, if an element is 0, set its entire row and column to 0‘s.
You must do it in place.
Example 1:
1 | Input: matrix = [[1,1,1],[1,0,1],[1,1,1]] |
Example 2:
1 | Input: matrix = [[0,1,2,0],[3,4,5,2],[1,3,1,5]] |
Constraints:
- `m == matrix.length`
- `n == matrix[0].length`
- `1 <= m, n <= 200`
- `-2^31 <= matrix[i][j] <= 2^31 - 1`
Follow up:
- A straightforward solution using `O(mn)` space is probably a bad idea.
- A simple improvement uses `O(m + n)` space, but still not the best solution.
- Could you devise a constant space solution?
240. Search a 2D Matrix II Medium
Write an efficient algorithm that searches for a value target in an m x n integer matrix matrix. This matrix has the following properties:
- Integers in each row are sorted in ascending from left to right.
- Integers in each column are sorted in ascending from top to bottom.
Example 1:
1 | Input: matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 5 |
Example 2:
1 | Input: matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 20 |
Constraints:
- `m == matrix.length`
- `n == matrix[i].length`
- `1 <= n, m <= 300`
- `-10^9 <= matrix[i][j] <= 10^9`
- All the integers in each row are **sorted** in ascending order.
- All the integers in each column are **sorted** in ascending order.
- `-10^9 <= target <= 10^9`
Sliding Window
3. Longest Substring Without Repeating Characters Medium
Given a string s, find the length of the longest substring without duplicate characters.
Example 1:
1 | Input: s = "abcabcbb" |
Example 2:
1 | Input: s = "bbbbb" |
Example 3:
1 | Input: s = "pwwkew" |
Constraints:
- `0 <= s.length <= 5 * 10^4`
- `s` consists of English letters, digits, symbols and spaces.
76. Minimum Window Substring Hard
Given two strings s and t of lengths m and n respectively, return the minimum window substring_ of s such that every character in t (including duplicates) is included in the window_. If there is no such substring, return _the empty string _"".
The testcases will be generated such that the answer is unique.
Example 1:
1 | Input: s = "ADOBECODEBANC", t = "ABC" |
Example 2:
1 | Input: s = "a", t = "a" |
Example 3:
1 | Input: s = "a", t = "aa" |
Constraints:
- `m == s.length`
- `n == t.length`
- `1 <= m, n <= 10^5`
- `s` and `t` consist of uppercase and lowercase English letters.
Follow up: Could you find an algorithm that runs in O(m + n) time?
239. Sliding Window Maximum Hard
You are given an array of integers nums, there is a sliding window of size k which is moving from the very left of the array to the very right. You can only see the k numbers in the window. Each time the sliding window moves right by one position.
Return the max sliding window.
Example 1:
1 | Input: nums = [1,3,-1,-3,5,3,6,7], k = 3 |
Example 2:
1 | Input: nums = [1], k = 1 |
Constraints:
- `1 <= nums.length <= 10^5`
- `-10^4 <= nums[i] <= 10^4`
- `1 <= k <= nums.length`
438. Find All Anagrams in a String Medium
Given two strings s and p, return an array of all the start indices of p‘s anagrams in s. You may return the answer in any order.
Example 1:
1 | Input: s = "cbaebabacd", p = "abc" |
Example 2:
1 | Input: s = "abab", p = "ab" |
Constraints:
- `1 <= s.length, p.length <= 3 * 10^4`
- `s` and `p` consist of lowercase English letters.
Stack
20. Valid Parentheses Easy
Given a string s containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid.
An input string is valid if:
- Open brackets must be closed by the same type of brackets.
- Open brackets must be closed in the correct order.
- Every close bracket has a corresponding open bracket of the same type.
Example 1:
Input: s = “()”
Output: true
Example 2:
Input: s = “()[]{}”
Output: true
Example 3:
Input: s = “(]”
Output: false
Example 4:
Input: s = “([])”
Output: true
Example 5:
Input: s = “([)]”
Output: false
Constraints:
- `1 <= s.length <= 10^4`
- `s` consists of parentheses only `'()[]{}'`.
84. Largest Rectangle in Histogram Hard
Given an array of integers heights representing the histogram’s bar height where the width of each bar is 1, return the area of the largest rectangle in the histogram.
Example 1:
1 | Input: heights = [2,1,5,6,2,3] |
Example 2:
1 | Input: heights = [2,4] |
Constraints:
- `1 <= heights.length <= 10^5`
- `0 <= heights[i] <= 10^4`
155. Min Stack Medium
Design a stack that supports push, pop, top, and retrieving the minimum element in constant time.
Implement the MinStack class:
- `MinStack()` initializes the stack object.
- `void push(int val)` pushes the element `val` onto the stack.
- `void pop()` removes the element on the top of the stack.
- `int top()` gets the top element of the stack.
- `int getMin()` retrieves the minimum element in the stack.
You must implement a solution with O(1) time complexity for each function.
Example 1:
1 | Input |
Constraints:
- `-2^31 <= val <= 2^31 - 1`
- Methods `pop`, `top` and `getMin` operations will always be called on **non-empty** stacks.
- At most `3 * 10^4` calls will be made to `push`, `pop`, `top`, and `getMin`.
394. Decode String Medium
Given an encoded string, return its decoded string.
The encoding rule is: k[encoded_string], where the encoded_string inside the square brackets is being repeated exactly k times. Note that k is guaranteed to be a positive integer.
You may assume that the input string is always valid; there are no extra white spaces, square brackets are well-formed, etc. Furthermore, you may assume that the original data does not contain any digits and that digits are only for those repeat numbers, k. For example, there will not be input like 3a or 2[4].
The test cases are generated so that the length of the output will never exceed 10^5.
Example 1:
1 | Input: s = "3[a]2[bc]" |
Example 2:
1 | Input: s = "3[a2[c]]" |
Example 3:
1 | Input: s = "2[abc]3[cd]ef" |
Constraints:
- `1 <= s.length <= 30`
- `s` consists of lowercase English letters, digits, and square brackets `'[]'`.
- `s` is guaranteed to be **a valid** input.
- All the integers in `s` are in the range `[1, 300]`.
739. Daily Temperatures Medium
Given an array of integers temperatures represents the daily temperatures, return an array answer such that answer[i] is the number of days you have to wait after the i^th day to get a warmer temperature. If there is no future day for which this is possible, keep answer[i] == 0 instead.
Example 1:
1 | Input: temperatures = [73,74,75,71,69,72,76,73] |
Example 2:
1 | Input: temperatures = [30,40,50,60] |
Example 3:
1 | Input: temperatures = [30,60,90] |
Constraints:
- `1 <= temperatures.length <= 10^5`
- `30 <= temperatures[i] <= 100`
Two Pointers
11. Container With Most Water Medium
You are given an integer array height of length n. There are n vertical lines drawn such that the two endpoints of the i^th line are (i, 0) and (i, height[i]).
Find two lines that together with the x-axis form a container, such that the container contains the most water.
Return the maximum amount of water a container can store.
Notice that you may not slant the container.
Example 1:
1 | Input: height = [1,8,6,2,5,4,8,3,7] |
Example 2:
1 | Input: height = [1,1] |
Constraints:
- `n == height.length`
- `2 <= n <= 10^5`
- `0 <= height[i] <= 10^4`
15. 3Sum Medium
Given an integer array nums, return all the triplets [nums[i], nums[j], nums[k]] such that i != j, i != k, and j != k, and nums[i] + nums[j] + nums[k] == 0.
Notice that the solution set must not contain duplicate triplets.
Example 1:
1 | Input: nums = [-1,0,1,2,-1,-4] |
Example 2:
1 | Input: nums = [0,1,1] |
Example 3:
1 | Input: nums = [0,0,0] |
Constraints:
- `3 <= nums.length <= 3000`
- `-10^5 <= nums[i] <= 10^5`
42. Trapping Rain Water Hard
Given n non-negative integers representing an elevation map where the width of each bar is 1, compute how much water it can trap after raining.
Example 1:
1 | Input: height = [0,1,0,2,1,0,1,3,2,1,2,1] |
Example 2:
1 | Input: height = [4,2,0,3,2,5] |
Constraints:
- `n == height.length`
- `1 <= n <= 2 * 10^4`
- `0 <= height[i] <= 10^5`
283. Move Zeroes Easy
Given an integer array nums, move all 0‘s to the end of it while maintaining the relative order of the non-zero elements.
Note that you must do this in-place without making a copy of the array.
Example 1:
1 | Input: nums = [0,1,0,3,12] |
Example 2:
1 | Input: nums = [0] |
Constraints:
- `1 <= nums.length <= 10^4`
- `-2^31 <= nums[i] <= 2^31 - 1`
Follow up: Could you minimize the total number of operations done?
Trie
208. Implement Trie (Prefix Tree) Medium
A trie (pronounced as “try”) or prefix tree is a tree data structure used to efficiently store and retrieve keys in a dataset of strings. There are various applications of this data structure, such as autocomplete and spellchecker.
Implement the Trie class:
- `Trie()` Initializes the trie object.
- `void insert(String word)` Inserts the string `word` into the trie.
- `boolean search(String word)` Returns `true` if the string `word` is in the trie (i.e., was inserted before), and `false` otherwise.
- `boolean startsWith(String prefix)` Returns `true` if there is a previously inserted string `word` that has the prefix `prefix`, and `false` otherwise.
Example 1:
1 | Input |
Constraints:
- `1 <= word.length, prefix.length <= 2000`
- `word` and `prefix` consist only of lowercase English letters.
- At most `3 * 10^4` calls **in total** will be made to `insert`, `search`, and `startsWith`.
Miscellaneous
31. Next Permutation Medium
A permutation of an array of integers is an arrangement of its members into a sequence or linear order.
- For example, for `arr = [1,2,3]`, the following are all the permutations of `arr`: `[1,2,3], [1,3,2], [2, 1, 3], [2, 3, 1], [3,1,2], [3,2,1]`.
The next permutation of an array of integers is the next lexicographically greater permutation of its integer. More formally, if all the permutations of the array are sorted in one container according to their lexicographical order, then the next permutation of that array is the permutation that follows it in the sorted container. If such arrangement is not possible, the array must be rearranged as the lowest possible order (i.e., sorted in ascending order).
- For example, the next permutation of `arr = [1,2,3]` is `[1,3,2]`.
- Similarly, the next permutation of `arr = [2,3,1]` is `[3,1,2]`.
- While the next permutation of `arr = [3,2,1]` is `[1,2,3]` because `[3,2,1]` does not have a lexicographical larger rearrangement.
Given an array of integers nums, find the next permutation of nums.
The replacement must be in place and use only constant extra memory.
Example 1:
1 | Input: nums = [1,2,3] |
Example 2:
1 | Input: nums = [3,2,1] |
Example 3:
1 | Input: nums = [1,1,5] |
Constraints:
- `1 <= nums.length <= 100`
- `0 <= nums[i] <= 100`
41. First Missing Positive Hard
Given an unsorted integer array nums. Return the smallest positive integer that is not present in nums.
You must implement an algorithm that runs in O(n) time and uses O(1) auxiliary space.
Example 1:
1 | Input: nums = [1,2,0] |
Example 2:
1 | Input: nums = [3,4,-1,1] |
Example 3:
1 | Input: nums = [7,8,9,11,12] |
Constraints:
- `1 <= nums.length <= 10^5`
- `-2^31 <= nums[i] <= 2^31 - 1`
53. Maximum Subarray Medium
Given an integer array nums, find the subarray with the largest sum, and return its sum.
Example 1:
1 | Input: nums = [-2,1,-3,4,-1,2,1,-5,4] |
Example 2:
1 | Input: nums = [1] |
Example 3:
1 | Input: nums = [5,4,-1,7,8] |
Constraints:
- `1 <= nums.length <= 10^5`
- `-10^4 <= nums[i] <= 10^4`
Follow up: If you have figured out the O(n) solution, try coding another solution using the divide and conquer approach, which is more subtle.
56. Merge Intervals Medium
Given an array of intervals where intervals[i] = [starti, endi], merge all overlapping intervals, and return an array of the non-overlapping intervals that cover all the intervals in the input.
Example 1:
1 | Input: intervals = [[1,3],[2,6],[8,10],[15,18]] |
Example 2:
1 | Input: intervals = [[1,4],[4,5]] |
Example 3:
1 | Input: intervals = [[4,7],[1,4]] |
Constraints:
- `1 i i <= 10^4`
75. Sort Colors Medium
Given an array nums with n objects colored red, white, or blue, sort them **in-place **so that objects of the same color are adjacent, with the colors in the order red, white, and blue.
We will use the integers 0, 1, and 2 to represent the color red, white, and blue, respectively.
You must solve this problem without using the library’s sort function.
Example 1:
1 | Input: nums = [2,0,2,1,1,0] |
Example 2:
1 | Input: nums = [2,0,1] |
Constraints:
- `n == nums.length`
- `1 <= n <= 300`
- `nums[i]` is either `0`, `1`, or `2`.
Follow up: Could you come up with a one-pass algorithm using only constant extra space?
136. Single Number Easy
Given a non-empty array of integers nums, every element appears twice except for one. Find that single one.
You must implement a solution with a linear runtime complexity and use only constant extra space.
Example 1:
Input: nums = [2,2,1]
Output: 1
Example 2:
Input: nums = [4,1,2,1,2]
Output: 4
Example 3:
Input: nums = [1]
Output: 1
Constraints:
- `1 <= nums.length <= 3 * 10^4`
- `-3 * 10^4 <= nums[i] <= 3 * 10^4`
- Each element in the array appears twice except for one element which appears only once.
169. Majority Element Easy
Given an array nums of size n, return the majority element.
The majority element is the element that appears more than ⌊n / 2⌋ times. You may assume that the majority element always exists in the array.
Example 1:
1 | Input: nums = [3,2,3] |
Example 2:
1 | Input: nums = [2,2,1,1,1,2,2] |
Constraints:
- `n == nums.length`
- `1 <= n <= 5 * 10^4`
- `-10^9 <= nums[i] <= 10^9`
- The input is generated such that a majority element will exist in the array.
Follow-up: Could you solve the problem in linear time and in O(1) space?
189. Rotate Array Medium
Given an integer array nums, rotate the array to the right by k steps, where k is non-negative.
Example 1:
1 | Input: nums = [1,2,3,4,5,6,7], k = 3 |
Example 2:
1 | Input: nums = [-1,-100,3,99], k = 2 |
Constraints:
- `1 <= nums.length <= 10^5`
- `-2^31 <= nums[i] <= 2^31 - 1`
- `0 <= k <= 10^5`
Follow up:
- Try to come up with as many solutions as you can. There are at least **three** different ways to solve this problem.
- Could you do it in-place with `O(1)` extra space?
238. Product of Array Except Self Medium
Given an integer array nums, return an array answer such that answer[i] is equal to the product of all the elements of nums except nums[i].
The product of any prefix or suffix of nums is guaranteed to fit in a 32-bit integer.
You must write an algorithm that runs in O(n) time and without using the division operation.
Example 1:
1 | Input: nums = [1,2,3,4] |
Example 2:
1 | Input: nums = [-1,1,0,-3,3] |
Constraints:
- `2 <= nums.length <= 10^5`
- `-30 <= nums[i] <= 30`
- The input is generated such that `answer[i]` is **guaranteed** to fit in a **32-bit** integer.
Follow up: Can you solve the problem in O(1) extra space complexity? (The output array does not count as extra space for space complexity analysis.)
287. Find the Duplicate Number Medium
Given an array of integers nums containing n + 1 integers where each integer is in the range [1, n] inclusive.
There is only one repeated number in nums, return this repeated number.
You must solve the problem without modifying the array nums and using only constant extra space.
Example 1:
1 | Input: nums = [1,3,4,2,2] |
Example 2:
1 | Input: nums = [3,1,3,4,2] |
Example 3:
1 | Input: nums = [3,3,3,3,3] |
Constraints:
- `1 <= n <= 10^5`
- `nums.length == n + 1`
- `1 <= nums[i] <= n`
- All the integers in `nums` appear only **once** except for **precisely one integer** which appears **two or more** times.
Follow up:
- How can we prove that at least one duplicate number must exist in `nums`?
- Can you solve the problem in linear runtime complexity?