2022-04-16
538. Convert BST to Greater Tree
Topic: Tree, Depth-First Search, Binary Search Tree, Binary Tree
Difficulty: Medium
Problem:
Given the
As a reminder, a binary search tree is a tree that satisfies these constraints:
• The left subtree of a node contains only nodes with keys less than the node's key.
• The right subtree of a node contains only nodes with keys greater than the node's key.
• Both the left and right subtrees must also be binary search trees.
Example 1:
Image: https://assets.leetcode.com/uploads/2019/05/02/tree.png
Example 2:
Constraints:
• The number of nodes in the tree is in the range
•
• All the values in the tree are unique.
•
Note: This question is the same as 1038: <https://leetcode.com/problems/binary-search-tree-to-greater-sum-tree/>
538. Convert BST to Greater Tree
Topic: Tree, Depth-First Search, Binary Search Tree, Binary Tree
Difficulty: Medium
Problem:
Given the
root of a Binary Search Tree (BST), convert it to a Greater Tree such that every key of the original BST is changed to the original key plus the sum of all keys greater than the original key in BST.As a reminder, a binary search tree is a tree that satisfies these constraints:
• The left subtree of a node contains only nodes with keys less than the node's key.
• The right subtree of a node contains only nodes with keys greater than the node's key.
• Both the left and right subtrees must also be binary search trees.
Example 1:
Image: https://assets.leetcode.com/uploads/2019/05/02/tree.png
Input: root = [4,1,6,0,2,5,7,null,null,null,3,null,null,null,8]
Output: [30,36,21,36,35,26,15,null,null,null,33,null,null,null,8]
Example 2:
Input: root = [0,null,1]
Output: [1,null,1]
Constraints:
• The number of nodes in the tree is in the range
[0, 10^4].•
-10^4 <= Node.val <= 10^4• All the values in the tree are unique.
•
root is guaranteed to be a valid binary search tree.Note: This question is the same as 1038: <https://leetcode.com/problems/binary-search-tree-to-greater-sum-tree/>
2022-04-17
897. Increasing Order Search Tree
Topic: Stack, Tree, Depth-First Search, Binary Search Tree, Binary Tree
Difficulty: Easy
Problem:
Given the
Example 1:
Image: https://assets.leetcode.com/uploads/2020/11/17/ex1.jpg
Example 2:
Image: https://assets.leetcode.com/uploads/2020/11/17/ex2.jpg
Constraints:
• The number of nodes in the given tree will be in the range
•
897. Increasing Order Search Tree
Topic: Stack, Tree, Depth-First Search, Binary Search Tree, Binary Tree
Difficulty: Easy
Problem:
Given the
root of a binary search tree, rearrange the tree in in-order so that the leftmost node in the tree is now the root of the tree, and every node has no left child and only one right child.Example 1:
Image: https://assets.leetcode.com/uploads/2020/11/17/ex1.jpg
Input: root = [5,3,6,2,4,null,8,1,null,null,null,7,9]
Output: [1,null,2,null,3,null,4,null,5,null,6,null,7,null,8,null,9]
Example 2:
Image: https://assets.leetcode.com/uploads/2020/11/17/ex2.jpg
Input: root = [5,1,7]
Output: [1,null,5,null,7]
Constraints:
• The number of nodes in the given tree will be in the range
[1, 100].•
0 <= Node.val <= 10002022-04-18
230. Kth Smallest Element in a BST
Topic: Tree, Depth-First Search, Binary Search Tree, Binary Tree
Difficulty: Medium
Problem:
Given the
Example 1:
Image: https://assets.leetcode.com/uploads/2021/01/28/kthtree1.jpg
Example 2:
Image: https://assets.leetcode.com/uploads/2021/01/28/kthtree2.jpg
Constraints:
• The number of nodes in the tree is
•
•
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?
230. Kth Smallest Element in a BST
Topic: Tree, Depth-First Search, Binary Search Tree, Binary Tree
Difficulty: Medium
Problem:
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:
Image: https://assets.leetcode.com/uploads/2021/01/28/kthtree1.jpg
Input: root = [3,1,4,null,2], k = 1
Output: 1
Example 2:
Image: https://assets.leetcode.com/uploads/2021/01/28/kthtree2.jpg
Input: root = [5,3,6,2,4,null,null,1], k = 3
Output: 3
Constraints:
• The number of nodes in the tree is
n.•
1 <= k <= n <= 10^4•
0 <= Node.val <= 10^4Follow 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?
2022-04-19
99. Recover Binary Search Tree
Topic: Tree, Depth-First Search, Binary Search Tree, Binary Tree
Difficulty: Medium
Problem:
You are given the
Example 1:
Image: https://assets.leetcode.com/uploads/2020/10/28/recover1.jpg
Example 2:
Image: https://assets.leetcode.com/uploads/2020/10/28/recover2.jpg
Constraints:
• The number of nodes in the tree is in the range
•
Follow up: A solution using
99. Recover Binary Search Tree
Topic: Tree, Depth-First Search, Binary Search Tree, Binary Tree
Difficulty: Medium
Problem:
You are given the
root of a binary search tree (BST), where the values of exactly two nodes of the tree were swapped by mistake. Recover the tree without changing its structure.Example 1:
Image: https://assets.leetcode.com/uploads/2020/10/28/recover1.jpg
Input: root = [1,3,null,null,2]
Output: [3,1,null,null,2]
Explanation: 3 cannot be a left child of 1 because 3 > 1. Swapping 1 and 3 makes the BST valid.
Example 2:
Image: https://assets.leetcode.com/uploads/2020/10/28/recover2.jpg
Input: root = [3,1,4,null,null,2]
Output: [2,1,4,null,null,3]
Explanation: 2 cannot be in the right subtree of 3 because 2 < 3. Swapping 2 and 3 makes the BST valid.
Constraints:
• The number of nodes in the tree is in the range
[2, 1000].•
-2^31 <= Node.val <= 2^31 - 1Follow up: A solution using
O(n) space is pretty straight-forward. Could you devise a constant O(1) space solution?2022-04-20
173. Binary Search Tree Iterator
Topic: Stack, Tree, Design, Binary Search Tree, Binary Tree, Iterator
Difficulty: Medium
Problem:
Implement the
•
•
•
Notice that by initializing the pointer to a non-existent smallest number, the first call to
You may assume that
Example 1:
Image: https://assets.leetcode.com/uploads/2018/12/25/bst-tree.png
Constraints:
• The number of nodes in the tree is in the range
•
• At most
Follow up:
• Could you implement
173. Binary Search Tree Iterator
Topic: Stack, Tree, Design, Binary Search Tree, Binary Tree, Iterator
Difficulty: Medium
Problem:
Implement the
BSTIterator class that represents an iterator over the in-order traversal of a binary search tree (BST):•
BSTIterator(TreeNode root) Initializes an object of the BSTIterator class. The root of the BST is given as part of the constructor. The pointer should be initialized to a non-existent number smaller than any element in the BST.•
boolean hasNext() Returns true if there exists a number in the traversal to the right of the pointer, otherwise returns false.•
int next() Moves the pointer to the right, then returns the number at the pointer.Notice that by initializing the pointer to a non-existent smallest number, the first call to
next() will return the smallest element in the BST.You may assume that
next() calls will always be valid. That is, there will be at least a next number in the in-order traversal when next() is called.Example 1:
Image: https://assets.leetcode.com/uploads/2018/12/25/bst-tree.png
Input
["BSTIterator", "next", "next", "hasNext", "next", "hasNext", "next", "hasNext", "next", "hasNext"]
[[[7, 3, 15, null, null, 9, 20]], [], [], [], [], [], [], [], [], []]
Output
[null, 3, 7, true, 9, true, 15, true, 20, false]
Explanation
BSTIterator bSTIterator = new BSTIterator([7, 3, 15, null, null, 9, 20]);
bSTIterator.next(); // return 3
bSTIterator.next(); // return 7
bSTIterator.hasNext(); // return True
bSTIterator.next(); // return 9
bSTIterator.hasNext(); // return True
bSTIterator.next(); // return 15
bSTIterator.hasNext(); // return True
bSTIterator.next(); // return 20
bSTIterator.hasNext(); // return False
Constraints:
• The number of nodes in the tree is in the range
[1, 10^5].•
0 <= Node.val <= 10^6• At most
10^5 calls will be made to hasNext, and next.Follow up:
• Could you implement
next() and hasNext() to run in average O(1) time and use O(h) memory, where h is the height of the tree?2022-04-21
705. Design HashSet
Topic: Array, Hash Table, Linked List, Design, Hash Function
Difficulty: Easy
Problem:
Design a HashSet without using any built-in hash table libraries.
Implement
•
•
•
Example 1:
Constraints:
•
• At most
705. Design HashSet
Topic: Array, Hash Table, Linked List, Design, Hash Function
Difficulty: Easy
Problem:
Design a HashSet without using any built-in hash table libraries.
Implement
MyHashSet class:•
void add(key) Inserts the value key into the HashSet.•
bool contains(key) Returns whether the value key exists in the HashSet or not.•
void remove(key) Removes the value key in the HashSet. If key does not exist in the HashSet, do nothing.Example 1:
Input
["MyHashSet", "add", "add", "contains", "contains", "add", "contains", "remove", "contains"]
[[], [1], [2], [1], [3], [2], [2], [2], [2]]
Output
[null, null, null, true, false, null, true, null, false]
Explanation
MyHashSet myHashSet = new MyHashSet();
myHashSet.add(1); // set = [1]
myHashSet.add(2); // set = [1, 2]
myHashSet.contains(1); // return True
myHashSet.contains(3); // return False, (not found)
myHashSet.add(2); // set = [1, 2]
myHashSet.contains(2); // return True
myHashSet.remove(2); // set = [1]
myHashSet.contains(2); // return False, (already removed)
Constraints:
•
0 <= key <= 10^6• At most
10^4 calls will be made to add, remove, and contains.2022-04-22
706. Design HashMap
Topic: Array, Hash Table, Linked List, Design, Hash Function
Difficulty: Easy
Problem:
Design a HashMap without using any built-in hash table libraries.
Implement the
•
•
•
•
Example 1:
Constraints:
•
• At most
706. Design HashMap
Topic: Array, Hash Table, Linked List, Design, Hash Function
Difficulty: Easy
Problem:
Design a HashMap without using any built-in hash table libraries.
Implement the
MyHashMap class:•
MyHashMap() initializes the object with an empty map.•
void put(int key, int value) inserts a (key, value) pair into the HashMap. If the key already exists in the map, update the corresponding value.•
int get(int key) returns the value to which the specified key is mapped, or -1 if this map contains no mapping for the key.•
void remove(key) removes the key and its corresponding value if the map contains the mapping for the key.Example 1:
Input
["MyHashMap", "put", "put", "get", "get", "put", "get", "remove", "get"]
[[], [1, 1], [2, 2], [1], [3], [2, 1], [2], [2], [2]]
Output
[null, null, null, 1, -1, null, 1, null, -1]
Explanation
MyHashMap myHashMap = new MyHashMap();
myHashMap.put(1, 1); // The map is now [[1,1]]
myHashMap.put(2, 2); // The map is now [[1,1], [2,2]]
myHashMap.get(1); // return 1, The map is now [[1,1], [2,2]]
myHashMap.get(3); // return -1 (i.e., not found), The map is now [[1,1], [2,2]]
myHashMap.put(2, 1); // The map is now [[1,1], [2,1]] (i.e., update the existing value)
myHashMap.get(2); // return 1, The map is now [[1,1], [2,1]]
myHashMap.remove(2); // remove the mapping for 2, The map is now [[1,1]]
myHashMap.get(2); // return -1 (i.e., not found), The map is now [[1,1]]
Constraints:
•
0 <= key, value <= 10^6• At most
10^4 calls will be made to put, get, and remove.2022-04-23
535. Encode and Decode TinyURL
Topic: Hash Table, String, Design, Hash Function
Difficulty: Medium
Problem:
Note: This is a companion problem to the System Design problem: Design TinyURL.
TinyURL is a URL shortening service where you enter a URL such as
There is no restriction on how your encode/decode algorithm should work. You just need to ensure that a URL can be encoded to a tiny URL and the tiny URL can be decoded to the original URL.
Implement the
•
•
•
Example 1:
Constraints:
•
•
535. Encode and Decode TinyURL
Topic: Hash Table, String, Design, Hash Function
Difficulty: Medium
Problem:
Note: This is a companion problem to the System Design problem: Design TinyURL.
TinyURL is a URL shortening service where you enter a URL such as
https://leetcode.com/problems/design-tinyurl and it returns a short URL such as http://tinyurl.com/4e9iAk. Design a class to encode a URL and decode a tiny URL.There is no restriction on how your encode/decode algorithm should work. You just need to ensure that a URL can be encoded to a tiny URL and the tiny URL can be decoded to the original URL.
Implement the
Solution class:•
Solution() Initializes the object of the system.•
String encode(String longUrl) Returns a tiny URL for the given longUrl.•
String decode(String shortUrl) Returns the original long URL for the given shortUrl. It is guaranteed that the given shortUrl was encoded by the same object.Example 1:
Input: url = "https://leetcode.com/problems/design-tinyurl"
Output: "https://leetcode.com/problems/design-tinyurl"
Explanation:
Solution obj = new Solution();
string tiny = obj.encode(url); // returns the encoded tiny url.
string ans = obj.decode(tiny); // returns the original url after deconding it.
Constraints:
•
1 <= url.length <= 10^4•
url is guranteed to be a valid URL.2022-04-24
1396. Design Underground System
Topic: Hash Table, String, Design
Difficulty: Medium
Problem:
An underground railway system is keeping track of customer travel times between different stations. They are using this data to calculate the average time it takes to travel from one station to another.
Implement the
•
• A customer with a card ID equal to
• A customer can only be checked into one place at a time.
•
• A customer with a card ID equal to
•
• Returns the average time it takes to travel from
• The average time is computed from all the previous traveling times from
• The time it takes to travel from
• There will be at least one customer that has traveled from
You may assume all calls to the
Example 1:
Constraints:
•
•
• All strings consist of uppercase and lowercase English letters and digits.
• There will be at most
• Answers within
1396. Design Underground System
Topic: Hash Table, String, Design
Difficulty: Medium
Problem:
An underground railway system is keeping track of customer travel times between different stations. They are using this data to calculate the average time it takes to travel from one station to another.
Implement the
UndergroundSystem class:•
void checkIn(int id, string stationName, int t)• A customer with a card ID equal to
id, checks in at the station stationName at time t.• A customer can only be checked into one place at a time.
•
void checkOut(int id, string stationName, int t)• A customer with a card ID equal to
id, checks out from the station stationName at time t.•
double getAverageTime(string startStation, string endStation)• Returns the average time it takes to travel from
startStation to endStation.• The average time is computed from all the previous traveling times from
startStation to endStation that happened directly, meaning a check in at startStation followed by a check out from endStation.• The time it takes to travel from
startStation to endStation may be different from the time it takes to travel from endStation to startStation.• There will be at least one customer that has traveled from
startStation to endStation before getAverageTime is called.You may assume all calls to the
checkIn and checkOut methods are consistent. If a customer checks in at time t_1 then checks out at time t_2, then t_1 < t_2. All events happen in chronological order.Example 1:
Input
["UndergroundSystem","checkIn","checkIn","checkIn","checkOut","checkOut","checkOut","getAverageTime","getAverageTime","checkIn","getAverageTime","checkOut","getAverageTime"]
[[],[45,"Leyton",3],[32,"Paradise",8],[27,"Leyton",10],[45,"Waterloo",15],[27,"Waterloo",20],[32,"Cambridge",22],["Paradise","Cambridge"],["Leyton","Waterloo"],[10,"Leyton",24],["Leyton","Waterloo"],[10,"Waterloo",38],["Leyton","Waterloo"]]
Output
[null,null,null,null,null,null,null,14.00000,11.00000,null,11.00000,null,12.00000]
Explanation
UndergroundSystem undergroundSystem = new UndergroundSystem();
undergroundSystem.checkIn(45, "Leyton", 3);
undergroundSystem.checkIn(32, "Paradise", 8);
undergroundSystem.checkIn(27, "Leyton", 10);
undergroundSystem.checkOut(45, "Waterloo", 15); // Customer 45 "Leyton" -> "Waterloo" in 15-3 = 12
undergroundSystem.checkOut(27, "Waterloo", 20); // Customer 27 "Leyton" -> "Waterloo" in 20-10 = 10
undergroundSystem.checkOut(32, "Cambridge", 22); // Customer 32 "Paradise" -> "Cambridge" in 22-8 = 14
undergroundSystem.getAverageTime("Paradise", "Cambridge"); // return 14.00000. One trip "Paradise" -> "Cambridge", (14) / 1 = 14
undergroundSystem.getAverageTime("Leyton", "Waterloo"); // return 11.00000. Two trips "Leyton" -> "Waterloo", (10 + 12) / 2 = 11
undergroundSystem.checkIn(10, "Leyton", 24);
undergroundSystem.getAverageTime("Leyton", "Waterloo"); // return 11.00000
undergroundSystem.checkOut(10, "Waterloo", 38); // Customer 10 "Leyton" -> "Waterloo" in 38-24 = 14
undergroundSystem.getAverageTime("Leyton", "Waterloo"); // return 12.00000. Three trips "Leyton" -> "Waterloo", (10 + 12 + 14) / 3 = 12
Constraints:
•
1 <= id, t <= 10^6•
1 <= stationName.length, startStation.length, endStation.length <= 10• All strings consist of uppercase and lowercase English letters and digits.
• There will be at most
2 * 10^4 calls in total to checkIn, checkOut, and getAverageTime.• Answers within
10^-5 of the actual value will be accepted.2022-04-25
284. Peeking Iterator
Topic: Array, Design, Iterator
Difficulty: Medium
Problem:
Design an iterator that supports the
Implement the
•
•
•
•
Note: Each language may have a different implementation of the constructor and
Example 1:
Constraints:
•
•
• All the calls to
• At most
Follow up: How would you extend your design to be generic and work with all types, not just integer?
284. Peeking Iterator
Topic: Array, Design, Iterator
Difficulty: Medium
Problem:
Design an iterator that supports the
peek operation on an existing iterator in addition to the hasNext and the next operations.Implement the
PeekingIterator class:•
PeekingIterator(Iterator<int> nums) Initializes the object with the given integer iterator iterator.•
int next() Returns the next element in the array and moves the pointer to the next element.•
boolean hasNext() Returns true if there are still elements in the array.•
int peek() Returns the next element in the array without moving the pointer.Note: Each language may have a different implementation of the constructor and
Iterator, but they all support the int next() and boolean hasNext() functions.Example 1:
Input
["PeekingIterator", "next", "peek", "next", "next", "hasNext"]
[[[1, 2, 3]], [], [], [], [], []]
Output
[null, 1, 2, 2, 3, false]
Explanation
PeekingIterator peekingIterator = new PeekingIterator([1, 2, 3]); // [1,2,3]
peekingIterator.next(); // return 1, the pointer moves to the next element [1,2,3].
peekingIterator.peek(); // return 2, the pointer does not move [1,2,3].
peekingIterator.next(); // return 2, the pointer moves to the next element [1,2,3]
peekingIterator.next(); // return 3, the pointer moves to the next element [1,2,3]
peekingIterator.hasNext(); // return False
Constraints:
•
1 <= nums.length <= 1000•
1 <= nums[i] <= 1000• All the calls to
next and peek are valid.• At most
1000 calls will be made to next, hasNext, and peek.Follow up: How would you extend your design to be generic and work with all types, not just integer?
2022-04-26
1584. Min Cost to Connect All Points
Topic: Array, Union Find, Minimum Spanning Tree
Difficulty: Medium
Problem:
You are given an array
The cost of connecting two points
Return the minimum cost to make all points connected. All points are connected if there is exactly one simple path between any two points.
Example 1:
Image: https://assets.leetcode.com/uploads/2020/08/26/d.png
Example 2:
Constraints:
•
•
• All pairs
1584. Min Cost to Connect All Points
Topic: Array, Union Find, Minimum Spanning Tree
Difficulty: Medium
Problem:
You are given an array
points representing integer coordinates of some points on a 2D-plane, where points[i] = [x_i, y_i].The cost of connecting two points
[x_i, y_i] and [x_j, y_j] is the manhattan distance between them: |x_i - x_j| + |y_i - y_j|, where |val| denotes the absolute value of val.Return the minimum cost to make all points connected. All points are connected if there is exactly one simple path between any two points.
Example 1:
Image: https://assets.leetcode.com/uploads/2020/08/26/d.png
Input: points = [[0,0],[2,2],[3,10],[5,2],[7,0]]
Output: 20
Explanation:
Image: [https://assets.leetcode.com/uploads/2020/08/26/c.png](https://assets.leetcode.com/uploads/2020/08/26/c.png)
We can connect the points as shown above to get the minimum cost of 20.
Notice that there is a unique path between every pair of points.
Example 2:
Input: points = [[3,12],[-2,5],[-4,1]]
Output: 18
Constraints:
•
1 <= points.length <= 1000•
-10^6 <= x_i, y_i <= 10^6• All pairs
(x_i, y_i) are distinct.2022-04-27
1202. Smallest String With Swaps
Topic: Hash Table, String, Depth-First Search, Breadth-First Search, Union Find
Difficulty: Medium
Problem:
You are given a string
You can swap the characters at any pair of indices in the given
Return the lexicographically smallest string that
Example 1:
Example 2:
Example 3:
Constraints:
•
•
•
•
1202. Smallest String With Swaps
Topic: Hash Table, String, Depth-First Search, Breadth-First Search, Union Find
Difficulty: Medium
Problem:
You are given a string
s, and an array of pairs of indices in the string pairs where pairs[i] = [a, b] indicates 2 indices(0-indexed) of the string.You can swap the characters at any pair of indices in the given
pairs any number of times.Return the lexicographically smallest string that
s can be changed to after using the swaps.Example 1:
Input: s = "dcab", pairs = [[0,3],[1,2]]
Output: "bacd"
Explaination:
Swap s[0] and s[3], s = "bcad"
Swap s[1] and s[2], s = "bacd"
Example 2:
Input: s = "dcab", pairs = [[0,3],[1,2],[0,2]]
Output: "abcd"
Explaination:
Swap s[0] and s[3], s = "bcad"
Swap s[0] and s[2], s = "acbd"
Swap s[1] and s[2], s = "abcd"
Example 3:
Input: s = "cba", pairs = [[0,1],[1,2]]
Output: "abc"
Explaination:
Swap s[0] and s[1], s = "bca"
Swap s[1] and s[2], s = "bac"
Swap s[0] and s[1], s = "abc"
Constraints:
•
1 <= s.length <= 10^5•
0 <= pairs.length <= 10^5•
0 <= pairs[i][0], pairs[i][1] < s.length•
s only contains lower case English letters.2022-04-28
1631. Path With Minimum Effort
Topic: Array, Binary Search, Depth-First Search, Breadth-First Search, Union Find, Heap (Priority Queue), Matrix
Difficulty: Medium
Problem:
You are a hiker preparing for an upcoming hike. You are given
A route's effort is the maximum absolute difference in heights between two consecutive cells of the route.
Return the minimum effort required to travel from the top-left cell to the bottom-right cell.
Example 1:
Image: https://assets.leetcode.com/uploads/2020/10/04/ex1.png
Example 2:
Image: https://assets.leetcode.com/uploads/2020/10/04/ex2.png
Example 3:
Image: https://assets.leetcode.com/uploads/2020/10/04/ex3.png
Constraints:
•
•
•
•
1631. Path With Minimum Effort
Topic: Array, Binary Search, Depth-First Search, Breadth-First Search, Union Find, Heap (Priority Queue), Matrix
Difficulty: Medium
Problem:
You are a hiker preparing for an upcoming hike. You are given
heights, a 2D array of size rows x columns, where heights[row][col] represents the height of cell (row, col). You are situated in the top-left cell, (0, 0), and you hope to travel to the bottom-right cell, (rows-1, columns-1) (i.e., 0-indexed). You can move up, down, left, or right, and you wish to find a route that requires the minimum effort.A route's effort is the maximum absolute difference in heights between two consecutive cells of the route.
Return the minimum effort required to travel from the top-left cell to the bottom-right cell.
Example 1:
Image: https://assets.leetcode.com/uploads/2020/10/04/ex1.png
Input: heights = [[1,2,2],[3,8,2],[5,3,5]]
Output: 2
Explanation: The route of [1,3,5,3,5] has a maximum absolute difference of 2 in consecutive cells.
This is better than the route of [1,2,2,2,5], where the maximum absolute difference is 3.
Example 2:
Image: https://assets.leetcode.com/uploads/2020/10/04/ex2.png
Input: heights = [[1,2,3],[3,8,4],[5,3,5]]
Output: 1
Explanation: The route of [1,2,3,4,5] has a maximum absolute difference of 1 in consecutive cells, which is better than route [1,3,5,3,5].
Example 3:
Image: https://assets.leetcode.com/uploads/2020/10/04/ex3.png
Input: heights = [[1,2,1,1,1],[1,2,1,2,1],[1,2,1,2,1],[1,2,1,2,1],[1,1,1,2,1]]
Output: 0
Explanation: This route does not require any effort.
Constraints:
•
rows == heights.length•
columns == heights[i].length•
1 <= rows, columns <= 100•
1 <= heights[i][j] <= 10^62022-04-29
785. Is Graph Bipartite?
Topic: Depth-First Search, Breadth-First Search, Union Find, Graph
Difficulty: Medium
Problem:
There is an undirected graph with
• There are no self-edges (
• There are no parallel edges (
• If
• The graph may not be connected, meaning there may be two nodes
A graph is bipartite if the nodes can be partitioned into two independent sets
Return
Example 1:
Image: https://assets.leetcode.com/uploads/2020/10/21/bi2.jpg
Example 2:
Image: https://assets.leetcode.com/uploads/2020/10/21/bi1.jpg
Constraints:
•
•
•
•
•
• All the values of
• If
785. Is Graph Bipartite?
Topic: Depth-First Search, Breadth-First Search, Union Find, Graph
Difficulty: Medium
Problem:
There is an undirected graph with
n nodes, where each node is numbered between 0 and n - 1. You are given a 2D array graph, where graph[u] is an array of nodes that node u is adjacent to. More formally, for each v in graph[u], there is an undirected edge between node u and node v. The graph has the following properties:• There are no self-edges (
graph[u] does not contain u).• There are no parallel edges (
graph[u] does not contain duplicate values).• If
v is in graph[u], then u is in graph[v] (the graph is undirected).• The graph may not be connected, meaning there may be two nodes
u and v such that there is no path between them.A graph is bipartite if the nodes can be partitioned into two independent sets
A and B such that every edge in the graph connects a node in set A and a node in set B.Return
true if and only if it is bipartite.Example 1:
Image: https://assets.leetcode.com/uploads/2020/10/21/bi2.jpg
Input: graph = [[1,2,3],[0,2],[0,1,3],[0,2]]
Output: false
Explanation: There is no way to partition the nodes into two independent sets such that every edge connects a node in one and a node in the other.
Example 2:
Image: https://assets.leetcode.com/uploads/2020/10/21/bi1.jpg
Input: graph = [[1,3],[0,2],[1,3],[0,2]]
Output: true
Explanation: We can partition the nodes into two sets: {0, 2} and {1, 3}.
Constraints:
•
graph.length == n•
1 <= n <= 100•
0 <= graph[u].length < n•
0 <= graph[u][i] <= n - 1•
graph[u] does not contain u.• All the values of
graph[u] are unique.• If
graph[u] contains v, then graph[v] contains u.2022-04-30
399. Evaluate Division
Topic: Array, Depth-First Search, Breadth-First Search, Union Find, Graph, Shortest Path
Difficulty: Medium
Problem:
You are given an array of variable pairs
You are also given some
Return the answers to all queries. If a single answer cannot be determined, return
Note: The input is always valid. You may assume that evaluating the queries will not result in division by zero and that there is no contradiction.
Example 1:
Example 2:
Example 3:
Constraints:
•
•
•
•
•
•
•
•
•
399. Evaluate Division
Topic: Array, Depth-First Search, Breadth-First Search, Union Find, Graph, Shortest Path
Difficulty: Medium
Problem:
You are given an array of variable pairs
equations and an array of real numbers values, where equations[i] = [A_i, B_i] and values[i] represent the equation A_i / B_i = values[i]. Each A_i or B_i is a string that represents a single variable.You are also given some
queries, where queries[j] = [C_j, D_j] represents the j^th query where you must find the answer for C_j / D_j = ?.Return the answers to all queries. If a single answer cannot be determined, return
-1.0.Note: The input is always valid. You may assume that evaluating the queries will not result in division by zero and that there is no contradiction.
Example 1:
Input: equations = [["a","b"],["b","c"]], values = [2.0,3.0], queries = [["a","c"],["b","a"],["a","e"],["a","a"],["x","x"]]
Output: [6.00000,0.50000,-1.00000,1.00000,-1.00000]
Explanation:
Given: a / b = 2.0, b / c = 3.0
queries are: a / c = ?, b / a = ?, a / e = ?, a / a = ?, x / x = ?
return: [6.0, 0.5, -1.0, 1.0, -1.0 ]
Example 2:
Input: equations = [["a","b"],["b","c"],["bc","cd"]], values = [1.5,2.5,5.0], queries = [["a","c"],["c","b"],["bc","cd"],["cd","bc"]]
Output: [3.75000,0.40000,5.00000,0.20000]
Example 3:
Input: equations = [["a","b"]], values = [0.5], queries = [["a","b"],["b","a"],["a","c"],["x","y"]]
Output: [0.50000,2.00000,-1.00000,-1.00000]
Constraints:
•
1 <= equations.length <= 20•
equations[i].length == 2•
1 <= A_i.length, B_i.length <= 5•
values.length == equations.length•
0.0 < values[i] <= 20.0•
1 <= queries.length <= 20•
queries[i].length == 2•
1 <= C_j.length, D_j.length <= 5•
A_i, B_i, C_j, D_j consist of lower case English letters and digits.2022-05-01
844. Backspace String Compare
Topic: Two Pointers, String, Stack, Simulation
Difficulty: Easy
Problem:
Given two strings
Note that after backspacing an empty text, the text will continue empty.
Example 1:
Example 2:
Example 3:
Constraints:
•
•
Follow up: Can you solve it in
844. Backspace String Compare
Topic: Two Pointers, String, Stack, Simulation
Difficulty: Easy
Problem:
Given two strings
s and t, return true if they are equal when both are typed into empty text editors. '#' means a backspace character.Note that after backspacing an empty text, the text will continue empty.
Example 1:
Input: s = "ab#c", t = "ad#c"
Output: true
Explanation: Both s and t become "ac".
Example 2:
Input: s = "ab##", t = "c#d#"
Output: true
Explanation: Both s and t become "".
Example 3:
Input: s = "a#c", t = "b"
Output: false
Explanation: s becomes "c" while t becomes "b".
Constraints:
•
1 <= s.length, t.length <= 200•
s and t only contain lowercase letters and '#' characters.Follow up: Can you solve it in
O(n) time and O(1) space?2022-05-02
905. Sort Array By Parity
Topic: Array, Two Pointers, Sorting
Difficulty: Easy
Problem:
Given an integer array
Return any array that satisfies this condition.
Example 1:
Example 2:
Constraints:
•
•
905. Sort Array By Parity
Topic: Array, Two Pointers, Sorting
Difficulty: Easy
Problem:
Given an integer array
nums, move all the even integers at the beginning of the array followed by all the odd integers.Return any array that satisfies this condition.
Example 1:
Input: nums = [3,1,2,4]
Output: [2,4,3,1]
Explanation: The outputs [4,2,3,1], [2,4,1,3], and [4,2,1,3] would also be accepted.
Example 2:
Input: nums = [0]
Output: [0]
Constraints:
•
1 <= nums.length <= 5000•
0 <= nums[i] <= 50002022-05-03
581. Shortest Unsorted Continuous Subarray
Topic: Array, Two Pointers, Stack, Greedy, Sorting, Monotonic Stack
Difficulty: Medium
Problem:
Given an integer array
Return the shortest such subarray and output its length.
Example 1:
Example 2:
Example 3:
Constraints:
•
•
Follow up: Can you solve it in
581. Shortest Unsorted Continuous Subarray
Topic: Array, Two Pointers, Stack, Greedy, Sorting, Monotonic Stack
Difficulty: Medium
Problem:
Given an integer array
nums, you need to find one continuous subarray that if you only sort this subarray in ascending order, then the whole array will be sorted in ascending order.Return the shortest such subarray and output its length.
Example 1:
Input: nums = [2,6,4,8,10,9,15]
Output: 5
Explanation: You need to sort [6, 4, 8, 10, 9] in ascending order to make the whole array sorted in ascending order.
Example 2:
Input: nums = [1,2,3,4]
Output: 0
Example 3:
Input: nums = [1]
Output: 0
Constraints:
•
1 <= nums.length <= 10^4•
-10^5 <= nums[i] <= 10^5Follow up: Can you solve it in
O(n) time complexity?2022-05-04
1679. Max Number of K-Sum Pairs
Topic: Array, Hash Table, Two Pointers, Sorting
Difficulty: Medium
Problem:
You are given an integer array
In one operation, you can pick two numbers from the array whose sum equals
Return the maximum number of operations you can perform on the array.
Example 1:
Example 2:
Constraints:
•
•
•
1679. Max Number of K-Sum Pairs
Topic: Array, Hash Table, Two Pointers, Sorting
Difficulty: Medium
Problem:
You are given an integer array
nums and an integer k.In one operation, you can pick two numbers from the array whose sum equals
k and remove them from the array.Return the maximum number of operations you can perform on the array.
Example 1:
Input: nums = [1,2,3,4], k = 5
Output: 2
Explanation: Starting with nums = [1,2,3,4]:
- Remove numbers 1 and 4, then nums = [2,3]
- Remove numbers 2 and 3, then nums = []
There are no more pairs that sum up to 5, hence a total of 2 operations.
Example 2:
Input: nums = [3,1,3,4,3], k = 6
Output: 1
Explanation: Starting with nums = [3,1,3,4,3]:
- Remove the first two 3's, then nums = [1,4,3]
There are no more pairs that sum up to 6, hence a total of 1 operation.
Constraints:
•
1 <= nums.length <= 10^5•
1 <= nums[i] <= 10^9•
1 <= k <= 10^92022-05-05
225. Implement Stack using Queues
Topic: Stack, Design, Queue
Difficulty: Easy
Problem:
Implement a last-in-first-out (LIFO) stack using only two queues. The implemented stack should support all the functions of a normal stack (
Implement the
•
•
•
•
Notes:
• You must use only standard operations of a queue, which means that only
• Depending on your language, the queue may not be supported natively. You may simulate a queue using a list or deque (double-ended queue) as long as you use only a queue's standard operations.
Example 1:
Constraints:
•
• At most
• All the calls to
Follow-up: Can you implement the stack using only one queue?
225. Implement Stack using Queues
Topic: Stack, Design, Queue
Difficulty: Easy
Problem:
Implement a last-in-first-out (LIFO) stack using only two queues. The implemented stack should support all the functions of a normal stack (
push, top, pop, and empty).Implement the
MyStack class:•
void push(int x) Pushes element x to the top of the stack.•
int pop() Removes the element on the top of the stack and returns it.•
int top() Returns the element on the top of the stack.•
boolean empty() Returns true if the stack is empty, false otherwise.Notes:
• You must use only standard operations of a queue, which means that only
push to back, peek/pop from front, size and is empty operations are valid.• Depending on your language, the queue may not be supported natively. You may simulate a queue using a list or deque (double-ended queue) as long as you use only a queue's standard operations.
Example 1:
Input
["MyStack", "push", "push", "top", "pop", "empty"]
[[], [1], [2], [], [], []]
Output
[null, null, null, 2, 2, false]
Explanation
MyStack myStack = new MyStack();
myStack.push(1);
myStack.push(2);
myStack.top(); // return 2
myStack.pop(); // return 2
myStack.empty(); // return False
Constraints:
•
1 <= x <= 9• At most
100 calls will be made to push, pop, top, and empty.• All the calls to
pop and top are valid.Follow-up: Can you implement the stack using only one queue?