2024-06-24
995. Minimum Number of K Consecutive Bit Flips
Topic: Array, Bit Manipulation, Queue, Sliding Window, Prefix Sum
Difficulty: Hard
Problem:
You are given a binary array
A k-bit flip is choosing a subarray of length
Return the minimum number of k-bit flips required so that there is no
A subarray is a contiguous part of an array.
Example 1:
Example 2:
Example 3:
Constraints:
•
•
995. Minimum Number of K Consecutive Bit Flips
Topic: Array, Bit Manipulation, Queue, Sliding Window, Prefix Sum
Difficulty: Hard
Problem:
You are given a binary array
nums and an integer k.A k-bit flip is choosing a subarray of length
k from nums and simultaneously changing every 0 in the subarray to 1, and every 1 in the subarray to 0.Return the minimum number of k-bit flips required so that there is no
0 in the array. If it is not possible, return -1.A subarray is a contiguous part of an array.
Example 1:
Input: nums = [0,1,0], k = 1
Output: 2
Explanation: Flip nums[0], then flip nums[2].
Example 2:
Input: nums = [1,1,0], k = 2
Output: -1
Explanation: No matter how we flip subarrays of size 2, we cannot make the array become [1,1,1].
Example 3:
Input: nums = [0,0,0,1,0,1,1,0], k = 3
Output: 3
Explanation:
Flip nums[0],nums[1],nums[2]: nums becomes [1,1,1,1,0,1,1,0]
Flip nums[4],nums[5],nums[6]: nums becomes [1,1,1,1,1,0,0,0]
Flip nums[5],nums[6],nums[7]: nums becomes [1,1,1,1,1,1,1,1]
Constraints:
•
1 <= nums.length <= 10^5•
1 <= k <= nums.length2024-06-25
1038. Binary Search Tree to Greater Sum 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 538: <https://leetcode.com/problems/convert-bst-to-greater-tree/>
1038. Binary Search Tree to Greater Sum 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
[1, 100].•
0 <= Node.val <= 100• All the values in the tree are unique.
Note: This question is the same as 538: <https://leetcode.com/problems/convert-bst-to-greater-tree/>
2024-06-26
1382. Balance a Binary Search Tree
Topic: Divide and Conquer, Greedy, Tree, Depth-First Search, Binary Search Tree, Binary Tree
Difficulty: Medium
Problem:
Given the
A binary search tree is balanced if the depth of the two subtrees of every node never differs by more than
Example 1:
Image: https://assets.leetcode.com/uploads/2021/08/10/balance1-tree.jpg
Example 2:
Image: https://assets.leetcode.com/uploads/2021/08/10/balanced2-tree.jpg
Constraints:
• The number of nodes in the tree is in the range
•
1382. Balance a Binary Search Tree
Topic: Divide and Conquer, Greedy, Tree, Depth-First Search, Binary Search Tree, Binary Tree
Difficulty: Medium
Problem:
Given the
root of a binary search tree, return a balanced binary search tree with the same node values. If there is more than one answer, return any of them.A binary search tree is balanced if the depth of the two subtrees of every node never differs by more than
1.Example 1:
Image: https://assets.leetcode.com/uploads/2021/08/10/balance1-tree.jpg
Input: root = [1,null,2,null,3,null,4,null,null]
Output: [2,1,3,null,null,null,4]
Explanation: This is not the only correct answer, [3,1,4,null,2] is also correct.
Example 2:
Image: https://assets.leetcode.com/uploads/2021/08/10/balanced2-tree.jpg
Input: root = [2,1,3]
Output: [2,1,3]
Constraints:
• The number of nodes in the tree is in the range
[1, 10^4].•
1 <= Node.val <= 10^52024-06-27
1791. Find Center of Star Graph
Topic: Graph
Difficulty: Easy
Problem:
There is an undirected star graph consisting of
You are given a 2D integer array
Example 1:
Image: https://assets.leetcode.com/uploads/2021/02/24/star_graph.png
Example 2:
Constraints:
•
•
•
•
•
• The given
1791. Find Center of Star Graph
Topic: Graph
Difficulty: Easy
Problem:
There is an undirected star graph consisting of
n nodes labeled from 1 to n. A star graph is a graph where there is one center node and exactly n - 1 edges that connect the center node with every other node.You are given a 2D integer array
edges where each edges[i] = [u_i, v_i] indicates that there is an edge between the nodes u_i and v_i. Return the center of the given star graph.Example 1:
Image: https://assets.leetcode.com/uploads/2021/02/24/star_graph.png
Input: edges = [[1,2],[2,3],[4,2]]
Output: 2
Explanation: As shown in the figure above, node 2 is connected to every other node, so 2 is the center.
Example 2:
Input: edges = [[1,2],[5,1],[1,3],[1,4]]
Output: 1
Constraints:
•
3 <= n <= 10^5•
edges.length == n - 1•
edges[i].length == 2•
1 <= u_i, v_i <= n•
u_i != v_i• The given
edges represent a valid star graph.2024-06-28
2285. Maximum Total Importance of Roads
Topic: Greedy, Graph, Sorting, Heap (Priority Queue)
Difficulty: Medium
Problem:
You are given an integer
You are also given a 2D integer array
You need to assign each city with an integer value from
Return the maximum total importance of all roads possible after assigning the values optimally.
Example 1:
Image: https://assets.leetcode.com/uploads/2022/04/07/ex1drawio.png
Example 2:
Image: https://assets.leetcode.com/uploads/2022/04/07/ex2drawio.png
Constraints:
•
•
•
•
•
• There are no duplicate roads.
2285. Maximum Total Importance of Roads
Topic: Greedy, Graph, Sorting, Heap (Priority Queue)
Difficulty: Medium
Problem:
You are given an integer
n denoting the number of cities in a country. The cities are numbered from 0 to n - 1.You are also given a 2D integer array
roads where roads[i] = [a_i, b_i] denotes that there exists a bidirectional road connecting cities a_i and b_i.You need to assign each city with an integer value from
1 to n, where each value can only be used once. The importance of a road is then defined as the sum of the values of the two cities it connects.Return the maximum total importance of all roads possible after assigning the values optimally.
Example 1:
Image: https://assets.leetcode.com/uploads/2022/04/07/ex1drawio.png
Input: n = 5, roads = [[0,1],[1,2],[2,3],[0,2],[1,3],[2,4]]
Output: 43
Explanation: The figure above shows the country and the assigned values of [2,4,5,3,1].
- The road (0,1) has an importance of 2 + 4 = 6.
- The road (1,2) has an importance of 4 + 5 = 9.
- The road (2,3) has an importance of 5 + 3 = 8.
- The road (0,2) has an importance of 2 + 5 = 7.
- The road (1,3) has an importance of 4 + 3 = 7.
- The road (2,4) has an importance of 5 + 1 = 6.
The total importance of all roads is 6 + 9 + 8 + 7 + 7 + 6 = 43.
It can be shown that we cannot obtain a greater total importance than 43.
Example 2:
Image: https://assets.leetcode.com/uploads/2022/04/07/ex2drawio.png
Input: n = 5, roads = [[0,3],[2,4],[1,3]]
Output: 20
Explanation: The figure above shows the country and the assigned values of [4,3,2,5,1].
- The road (0,3) has an importance of 4 + 5 = 9.
- The road (2,4) has an importance of 2 + 1 = 3.
- The road (1,3) has an importance of 3 + 5 = 8.
The total importance of all roads is 9 + 3 + 8 = 20.
It can be shown that we cannot obtain a greater total importance than 20.
Constraints:
•
2 <= n <= 5 * 10^4•
1 <= roads.length <= 5 * 10^4•
roads[i].length == 2•
0 <= a_i, b_i <= n - 1•
a_i != b_i• There are no duplicate roads.
2024-06-29
2192. All Ancestors of a Node in a Directed Acyclic Graph
Topic: Depth-First Search, Breadth-First Search, Graph, Topological Sort
Difficulty: Medium
Problem:
You are given a positive integer
You are also given a 2D integer array
Return a list
A node
Example 1:
Image: https://assets.leetcode.com/uploads/2019/12/12/e1.png
Example 2:
Image: https://assets.leetcode.com/uploads/2019/12/12/e2.png
Constraints:
•
•
•
•
•
• There are no duplicate edges.
• The graph is directed and acyclic.
2192. All Ancestors of a Node in a Directed Acyclic Graph
Topic: Depth-First Search, Breadth-First Search, Graph, Topological Sort
Difficulty: Medium
Problem:
You are given a positive integer
n representing the number of nodes of a Directed Acyclic Graph (DAG). The nodes are numbered from 0 to n - 1 (inclusive).You are also given a 2D integer array
edges, where edges[i] = [from_i, to_i] denotes that there is a unidirectional edge from from_i to to_i in the graph.Return a list
answer, where answer[i] is the list of ancestors of the i^th node, sorted in ascending order.A node
u is an ancestor of another node v if u can reach v via a set of edges.Example 1:
Image: https://assets.leetcode.com/uploads/2019/12/12/e1.png
Input: n = 8, edgeList = [[0,3],[0,4],[1,3],[2,4],[2,7],[3,5],[3,6],[3,7],[4,6]]
Output: [[],[],[],[0,1],[0,2],[0,1,3],[0,1,2,3,4],[0,1,2,3]]
Explanation:
The above diagram represents the input graph.
- Nodes 0, 1, and 2 do not have any ancestors.
- Node 3 has two ancestors 0 and 1.
- Node 4 has two ancestors 0 and 2.
- Node 5 has three ancestors 0, 1, and 3.
- Node 6 has five ancestors 0, 1, 2, 3, and 4.
- Node 7 has four ancestors 0, 1, 2, and 3.
Example 2:
Image: https://assets.leetcode.com/uploads/2019/12/12/e2.png
Input: n = 5, edgeList = [[0,1],[0,2],[0,3],[0,4],[1,2],[1,3],[1,4],[2,3],[2,4],[3,4]]
Output: [[],[0],[0,1],[0,1,2],[0,1,2,3]]
Explanation:
The above diagram represents the input graph.
- Node 0 does not have any ancestor.
- Node 1 has one ancestor 0.
- Node 2 has two ancestors 0 and 1.
- Node 3 has three ancestors 0, 1, and 2.
- Node 4 has four ancestors 0, 1, 2, and 3.
Constraints:
•
1 <= n <= 1000•
0 <= edges.length <= min(2000, n * (n - 1) / 2)•
edges[i].length == 2•
0 <= from_i, to_i <= n - 1•
from_i != to_i• There are no duplicate edges.
• The graph is directed and acyclic.
2024-06-30
1579. Remove Max Number of Edges to Keep Graph Fully Traversable
Topic: Union Find, Graph
Difficulty: Hard
Problem:
Alice and Bob have an undirected graph of
• Type 1: Can be traversed by Alice only.
• Type 2: Can be traversed by Bob only.
• Type 3: Can be traversed by both Alice and Bob.
Given an array
Return the maximum number of edges you can remove, or return
Example 1:
Image: https://assets.leetcode.com/uploads/2020/08/19/ex1.png
Example 2:
Image: https://assets.leetcode.com/uploads/2020/08/19/ex2.png
Example 3:
Image: https://assets.leetcode.com/uploads/2020/08/19/ex3.png
Constraints:
•
•
•
•
•
• All tuples
1579. Remove Max Number of Edges to Keep Graph Fully Traversable
Topic: Union Find, Graph
Difficulty: Hard
Problem:
Alice and Bob have an undirected graph of
n nodes and three types of edges:• Type 1: Can be traversed by Alice only.
• Type 2: Can be traversed by Bob only.
• Type 3: Can be traversed by both Alice and Bob.
Given an array
edges where edges[i] = [type_i, u_i, v_i] represents a bidirectional edge of type type_i between nodes u_i and v_i, find the maximum number of edges you can remove so that after removing the edges, the graph can still be fully traversed by both Alice and Bob. The graph is fully traversed by Alice and Bob if starting from any node, they can reach all other nodes.Return the maximum number of edges you can remove, or return
-1 if Alice and Bob cannot fully traverse the graph.Example 1:
Image: https://assets.leetcode.com/uploads/2020/08/19/ex1.png
Input: n = 4, edges = [[3,1,2],[3,2,3],[1,1,3],[1,2,4],[1,1,2],[2,3,4]]
Output: 2
Explanation: If we remove the 2 edges [1,1,2] and [1,1,3]. The graph will still be fully traversable by Alice and Bob. Removing any additional edge will not make it so. So the maximum number of edges we can remove is 2.
Example 2:
Image: https://assets.leetcode.com/uploads/2020/08/19/ex2.png
Input: n = 4, edges = [[3,1,2],[3,2,3],[1,1,4],[2,1,4]]
Output: 0
Explanation: Notice that removing any edge will not make the graph fully traversable by Alice and Bob.
Example 3:
Image: https://assets.leetcode.com/uploads/2020/08/19/ex3.png
Input: n = 4, edges = [[3,2,3],[1,1,2],[2,3,4]]
Output: -1
Explanation: In the current graph, Alice cannot reach node 4 from the other nodes. Likewise, Bob cannot reach 1. Therefore it's impossible to make the graph fully traversable.
Constraints:
•
1 <= n <= 10^5•
1 <= edges.length <= min(10^5, 3 * n * (n - 1) / 2)•
edges[i].length == 3•
1 <= type_i <= 3•
1 <= u_i < v_i <= n• All tuples
(type_i, u_i, v_i) are distinct.2024-07-01
1550. Three Consecutive Odds
Topic: Array
Difficulty: Easy
Problem:
Given an integer array
Example 1:
Example 2:
Constraints:
•
•
1550. Three Consecutive Odds
Topic: Array
Difficulty: Easy
Problem:
Given an integer array
arr, return true if there are three consecutive odd numbers in the array. Otherwise, return false.Example 1:
Input: arr = [2,6,4,1]
Output: false
Explanation: There are no three consecutive odds.
Example 2:
Input: arr = [1,2,34,3,4,5,7,23,12]
Output: true
Explanation: [5,7,23] are three consecutive odds.
Constraints:
•
1 <= arr.length <= 1000•
1 <= arr[i] <= 10002024-07-02
350. Intersection of Two Arrays II
Topic: Array, Hash Table, Two Pointers, Binary Search, Sorting
Difficulty: Easy
Problem:
Given two integer arrays
Example 1:
Example 2:
Constraints:
•
•
Follow up:
• What if the given array is already sorted? How would you optimize your algorithm?
• What if
• What if elements of
350. Intersection of Two Arrays II
Topic: Array, Hash Table, Two Pointers, Binary Search, Sorting
Difficulty: Easy
Problem:
Given two integer arrays
nums1 and nums2, return an array of their intersection. Each element in the result must appear as many times as it shows in both arrays and you may return the result in any order.Example 1:
Input: nums1 = [1,2,2,1], nums2 = [2,2]
Output: [2,2]
Example 2:
Input: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
Output: [4,9]
Explanation: [9,4] is also accepted.
Constraints:
•
1 <= nums1.length, nums2.length <= 1000•
0 <= nums1[i], nums2[i] <= 1000Follow up:
• What if the given array is already sorted? How would you optimize your algorithm?
• What if
nums1's size is small compared to nums2's size? Which algorithm is better?• What if elements of
nums2 are stored on disk, and the memory is limited such that you cannot load all elements into the memory at once?2024-07-03
1509. Minimum Difference Between Largest and Smallest Value in Three Moves
Topic: Array, Greedy, Sorting
Difficulty: Medium
Problem:
You are given an integer array
In one move, you can choose one element of
Return the minimum difference between the largest and smallest value of
Example 1:
Example 2:
Example 3:
Constraints:
•
•
1509. Minimum Difference Between Largest and Smallest Value in Three Moves
Topic: Array, Greedy, Sorting
Difficulty: Medium
Problem:
You are given an integer array
nums.In one move, you can choose one element of
nums and change it to any value.Return the minimum difference between the largest and smallest value of
nums after performing at most three moves.Example 1:
Input: nums = [5,3,2,4]
Output: 0
Explanation: We can make at most 3 moves.
In the first move, change 2 to 3. nums becomes [5,3,3,4].
In the second move, change 4 to 3. nums becomes [5,3,3,3].
In the third move, change 5 to 3. nums becomes [3,3,3,3].
After performing 3 moves, the difference between the minimum and maximum is 3 - 3 = 0.
Example 2:
Input: nums = [1,5,0,10,14]
Output: 1
Explanation: We can make at most 3 moves.
In the first move, change 5 to 0. nums becomes [1,0,0,10,14].
In the second move, change 10 to 0. nums becomes [1,0,0,0,14].
In the third move, change 14 to 1. nums becomes [1,0,0,0,1].
After performing 3 moves, the difference between the minimum and maximum is 1 - 0 = 1.
It can be shown that there is no way to make the difference 0 in 3 moves.
Example 3:
Input: nums = [3,100,20]
Output: 0
Explanation: We can make at most 3 moves.
In the first move, change 100 to 7. nums becomes [3,7,20].
In the second move, change 20 to 7. nums becomes [3,7,7].
In the third move, change 3 to 7. nums becomes [7,7,7].
After performing 3 moves, the difference between the minimum and maximum is 7 - 7 = 0.
Constraints:
•
1 <= nums.length <= 10^5•
-10^9 <= nums[i] <= 10^92024-07-04
2181. Merge Nodes in Between Zeros
Topic: Linked List, Simulation
Difficulty: Medium
Problem:
You are given the
For every two consecutive
Return the
Example 1:
Image: https://assets.leetcode.com/uploads/2022/02/02/ex1-1.png
Example 2:
Image: https://assets.leetcode.com/uploads/2022/02/02/ex2-1.png
Constraints:
• The number of nodes in the list is in the range
•
• There are no two consecutive nodes with
• The beginning and end of the linked list have
2181. Merge Nodes in Between Zeros
Topic: Linked List, Simulation
Difficulty: Medium
Problem:
You are given the
head of a linked list, which contains a series of integers separated by 0's. The beginning and end of the linked list will have Node.val == 0.For every two consecutive
0's, merge all the nodes lying in between them into a single node whose value is the sum of all the merged nodes. The modified list should not contain any 0's.Return the
head of the modified linked list.Example 1:
Image: https://assets.leetcode.com/uploads/2022/02/02/ex1-1.png
Input: head = [0,3,1,0,4,5,2,0]
Output: [4,11]
Explanation:
The above figure represents the given linked list. The modified list contains
- The sum of the nodes marked in green: 3 + 1 = 4.
- The sum of the nodes marked in red: 4 + 5 + 2 = 11.
Example 2:
Image: https://assets.leetcode.com/uploads/2022/02/02/ex2-1.png
Input: head = [0,1,0,3,0,2,2,0]
Output: [1,3,4]
Explanation:
The above figure represents the given linked list. The modified list contains
- The sum of the nodes marked in green: 1 = 1.
- The sum of the nodes marked in red: 3 = 3.
- The sum of the nodes marked in yellow: 2 + 2 = 4.
Constraints:
• The number of nodes in the list is in the range
[3, 2 * 10^5].•
0 <= Node.val <= 1000• There are no two consecutive nodes with
Node.val == 0.• The beginning and end of the linked list have
Node.val == 0.2024-07-05
2058. Find the Minimum and Maximum Number of Nodes Between Critical Points
Topic: Linked List
Difficulty: Medium
Problem:
A critical point in a linked list is defined as either a local maxima or a local minima.
A node is a local maxima if the current node has a value strictly greater than the previous node and the next node.
A node is a local minima if the current node has a value strictly smaller than the previous node and the next node.
Note that a node can only be a local maxima/minima if there exists both a previous node and a next node.
Given a linked list
Example 1:
Image: https://assets.leetcode.com/uploads/2021/10/13/a1.png
Example 2:
Image: https://assets.leetcode.com/uploads/2021/10/13/a2.png
Example 3:
Image: https://assets.leetcode.com/uploads/2021/10/14/a5.png
Constraints:
• The number of nodes in the list is in the range
•
2058. Find the Minimum and Maximum Number of Nodes Between Critical Points
Topic: Linked List
Difficulty: Medium
Problem:
A critical point in a linked list is defined as either a local maxima or a local minima.
A node is a local maxima if the current node has a value strictly greater than the previous node and the next node.
A node is a local minima if the current node has a value strictly smaller than the previous node and the next node.
Note that a node can only be a local maxima/minima if there exists both a previous node and a next node.
Given a linked list
head, return an array of length 2 containing [minDistance, maxDistance] where minDistance is the minimum distance between any two distinct critical points and maxDistance is the maximum distance between any two distinct critical points. If there are fewer than two critical points, return [-1, -1].Example 1:
Image: https://assets.leetcode.com/uploads/2021/10/13/a1.png
Input: head = [3,1]
Output: [-1,-1]
Explanation: There are no critical points in [3,1].
Example 2:
Image: https://assets.leetcode.com/uploads/2021/10/13/a2.png
Input: head = [5,3,1,2,5,1,2]
Output: [1,3]
Explanation: There are three critical points:
- [5,3,1,2,5,1,2]: The third node is a local minima because 1 is less than 3 and 2.
- [5,3,1,2,5,1,2]: The fifth node is a local maxima because 5 is greater than 2 and 1.
- [5,3,1,2,5,1,2]: The sixth node is a local minima because 1 is less than 5 and 2.
The minimum distance is between the fifth and the sixth node. minDistance = 6 - 5 = 1.
The maximum distance is between the third and the sixth node. maxDistance = 6 - 3 = 3.
Example 3:
Image: https://assets.leetcode.com/uploads/2021/10/14/a5.png
Input: head = [1,3,2,2,3,2,2,2,7]
Output: [3,3]
Explanation: There are two critical points:
- [1,3,2,2,3,2,2,2,7]: The second node is a local maxima because 3 is greater than 1 and 2.
- [1,3,2,2,3,2,2,2,7]: The fifth node is a local maxima because 3 is greater than 2 and 2.
Both the minimum and maximum distances are between the second and the fifth node.
Thus, minDistance and maxDistance is 5 - 2 = 3.
Note that the last node is not considered a local maxima because it does not have a next node.
Constraints:
• The number of nodes in the list is in the range
[2, 10^5].•
1 <= Node.val <= 10^52024-07-06
2582. Pass the Pillow
Topic: Math, Simulation
Difficulty: Easy
Problem:
There are
• For example, once the pillow reaches the
Given the two positive integers
Example 1:
Example 2:
Constraints:
•
•
2582. Pass the Pillow
Topic: Math, Simulation
Difficulty: Easy
Problem:
There are
n people standing in a line labeled from 1 to n. The first person in the line is holding a pillow initially. Every second, the person holding the pillow passes it to the next person standing in the line. Once the pillow reaches the end of the line, the direction changes, and people continue passing the pillow in the opposite direction.• For example, once the pillow reaches the
n^th person they pass it to the n - 1^th person, then to the n - 2^th person and so on.Given the two positive integers
n and time, return the index of the person holding the pillow after time seconds.Example 1:
Input: n = 4, time = 5
Output: 2
Explanation: People pass the pillow in the following way: 1 -> 2 -> 3 -> 4 -> 3 -> 2.
After five seconds, the 2^nd person is holding the pillow.
Example 2:
Input: n = 3, time = 2
Output: 3
Explanation: People pass the pillow in the following way: 1 -> 2 -> 3.
After two seconds, the 3^r^d person is holding the pillow.
Constraints:
•
2 <= n <= 1000•
1 <= time <= 10002024-07-07
1518. Water Bottles
Topic: Math, Simulation
Difficulty: Easy
Problem:
There are
The operation of drinking a full water bottle turns it into an empty bottle.
Given the two integers
Example 1:
Image: https://assets.leetcode.com/uploads/2020/07/01/sample_1_1875.png
Example 2:
Image: https://assets.leetcode.com/uploads/2020/07/01/sample_2_1875.png
Constraints:
•
•
1518. Water Bottles
Topic: Math, Simulation
Difficulty: Easy
Problem:
There are
numBottles water bottles that are initially full of water. You can exchange numExchange empty water bottles from the market with one full water bottle.The operation of drinking a full water bottle turns it into an empty bottle.
Given the two integers
numBottles and numExchange, return the maximum number of water bottles you can drink.Example 1:
Image: https://assets.leetcode.com/uploads/2020/07/01/sample_1_1875.png
Input: numBottles = 9, numExchange = 3
Output: 13
Explanation: You can exchange 3 empty bottles to get 1 full water bottle.
Number of water bottles you can drink: 9 + 3 + 1 = 13.
Example 2:
Image: https://assets.leetcode.com/uploads/2020/07/01/sample_2_1875.png
Input: numBottles = 15, numExchange = 4
Output: 19
Explanation: You can exchange 4 empty bottles to get 1 full water bottle.
Number of water bottles you can drink: 15 + 3 + 1 = 19.
Constraints:
•
1 <= numBottles <= 100•
2 <= numExchange <= 1002024-07-08
1823. Find the Winner of the Circular Game
Topic: Array, Math, Recursion, Queue, Simulation
Difficulty: Medium
Problem:
There are
The rules of the game are as follows:
1. Start at the
2. Count the next
3. The last friend you counted leaves the circle and loses the game.
4. If there is still more than one friend in the circle, go back to step
5. Else, the last friend in the circle wins the game.
Given the number of friends,
Example 1:
Image: https://assets.leetcode.com/uploads/2021/03/25/ic234-q2-ex11.png
Example 2:
Constraints:
•
Follow up:
Could you solve this problem in linear time with constant space?
1823. Find the Winner of the Circular Game
Topic: Array, Math, Recursion, Queue, Simulation
Difficulty: Medium
Problem:
There are
n friends that are playing a game. The friends are sitting in a circle and are numbered from 1 to n in clockwise order. More formally, moving clockwise from the i^th friend brings you to the (i+1)^th friend for 1 <= i < n, and moving clockwise from the n^th friend brings you to the 1^st friend.The rules of the game are as follows:
1. Start at the
1^st friend.2. Count the next
k friends in the clockwise direction including the friend you started at. The counting wraps around the circle and may count some friends more than once.3. The last friend you counted leaves the circle and loses the game.
4. If there is still more than one friend in the circle, go back to step
2 starting from the friend immediately clockwise of the friend who just lost and repeat.5. Else, the last friend in the circle wins the game.
Given the number of friends,
n, and an integer k, return the winner of the game.Example 1:
Image: https://assets.leetcode.com/uploads/2021/03/25/ic234-q2-ex11.png
Input: n = 5, k = 2
Output: 3
Explanation: Here are the steps of the game:
1) Start at friend 1.
2) Count 2 friends clockwise, which are friends 1 and 2.
3) Friend 2 leaves the circle. Next start is friend 3.
4) Count 2 friends clockwise, which are friends 3 and 4.
5) Friend 4 leaves the circle. Next start is friend 5.
6) Count 2 friends clockwise, which are friends 5 and 1.
7) Friend 1 leaves the circle. Next start is friend 3.
8) Count 2 friends clockwise, which are friends 3 and 5.
9) Friend 5 leaves the circle. Only friend 3 is left, so they are the winner.
Example 2:
Input: n = 6, k = 5
Output: 1
Explanation: The friends leave in this order: 5, 4, 6, 2, 3. The winner is friend 1.
Constraints:
•
1 <= k <= n <= 500Follow up:
Could you solve this problem in linear time with constant space?
2024-07-09
1701. Average Waiting Time
Topic: Array, Simulation
Difficulty: Medium
Problem:
There is a restaurant with a single chef. You are given an array
•
•
When a customer arrives, he gives the chef his order, and the chef starts preparing it once he is idle. The customer waits till the chef finishes preparing his order. The chef does not prepare food for more than one customer at a time. The chef prepares food for customers in the order they were given in the input.
Return the average waiting time of all customers. Solutions within
Example 1:
Example 2:
Constraints:
•
•
•
1701. Average Waiting Time
Topic: Array, Simulation
Difficulty: Medium
Problem:
There is a restaurant with a single chef. You are given an array
customers, where customers[i] = [arrival_i, time_i]:•
arrival_i is the arrival time of the i^th customer. The arrival times are sorted in non-decreasing order.•
time_i is the time needed to prepare the order of the i^th customer.When a customer arrives, he gives the chef his order, and the chef starts preparing it once he is idle. The customer waits till the chef finishes preparing his order. The chef does not prepare food for more than one customer at a time. The chef prepares food for customers in the order they were given in the input.
Return the average waiting time of all customers. Solutions within
10^-5 from the actual answer are considered accepted.Example 1:
Input: customers = [[1,2],[2,5],[4,3]]
Output: 5.00000
Explanation:
1) The first customer arrives at time 1, the chef takes his order and starts preparing it immediately at time 1, and finishes at time 3, so the waiting time of the first customer is 3 - 1 = 2.
2) The second customer arrives at time 2, the chef takes his order and starts preparing it at time 3, and finishes at time 8, so the waiting time of the second customer is 8 - 2 = 6.
3) The third customer arrives at time 4, the chef takes his order and starts preparing it at time 8, and finishes at time 11, so the waiting time of the third customer is 11 - 4 = 7.
So the average waiting time = (2 + 6 + 7) / 3 = 5.
Example 2:
Input: customers = [[5,2],[5,4],[10,3],[20,1]]
Output: 3.25000
Explanation:
1) The first customer arrives at time 5, the chef takes his order and starts preparing it immediately at time 5, and finishes at time 7, so the waiting time of the first customer is 7 - 5 = 2.
2) The second customer arrives at time 5, the chef takes his order and starts preparing it at time 7, and finishes at time 11, so the waiting time of the second customer is 11 - 5 = 6.
3) The third customer arrives at time 10, the chef takes his order and starts preparing it at time 11, and finishes at time 14, so the waiting time of the third customer is 14 - 10 = 4.
4) The fourth customer arrives at time 20, the chef takes his order and starts preparing it immediately at time 20, and finishes at time 21, so the waiting time of the fourth customer is 21 - 20 = 1.
So the average waiting time = (2 + 6 + 4 + 1) / 4 = 3.25.
Constraints:
•
1 <= customers.length <= 10^5•
1 <= arrival_i, time_i <= 10^4•
arrival_i <= arrival_i+12024-07-10
1598. Crawler Log Folder
Topic: Array, String, Stack
Difficulty: Easy
Problem:
The Leetcode file system keeps a log each time some user performs a change folder operation.
The operations are described below:
•
•
•
You are given a list of strings
The file system starts in the main folder, then the operations in
Return the minimum number of operations needed to go back to the main folder after the change folder operations.
Example 1:
Image: https://assets.leetcode.com/uploads/2020/09/09/sample_11_1957.png
Example 2:
Image: https://assets.leetcode.com/uploads/2020/09/09/sample_22_1957.png
Example 3:
Constraints:
•
•
•
•
• Folder names consist of lowercase English letters and digits.
1598. Crawler Log Folder
Topic: Array, String, Stack
Difficulty: Easy
Problem:
The Leetcode file system keeps a log each time some user performs a change folder operation.
The operations are described below:
•
"../" : Move to the parent folder of the current folder. (If you are already in the main folder, remain in the same folder).•
"./" : Remain in the same folder.•
"x/" : Move to the child folder named x (This folder is guaranteed to always exist).You are given a list of strings
logs where logs[i] is the operation performed by the user at the i^th step.The file system starts in the main folder, then the operations in
logs are performed.Return the minimum number of operations needed to go back to the main folder after the change folder operations.
Example 1:
Image: https://assets.leetcode.com/uploads/2020/09/09/sample_11_1957.png
Input: logs = ["d1/","d2/","../","d21/","./"]
Output: 2
Explanation: Use this change folder operation "../" 2 times and go back to the main folder.
Example 2:
Image: https://assets.leetcode.com/uploads/2020/09/09/sample_22_1957.png
Input: logs = ["d1/","d2/","./","d3/","../","d31/"]
Output: 3
Example 3:
Input: logs = ["d1/","../","../","../"]
Output: 0
Constraints:
•
1 <= logs.length <= 10^3•
2 <= logs[i].length <= 10•
logs[i] contains lowercase English letters, digits, '.', and '/'.•
logs[i] follows the format described in the statement.• Folder names consist of lowercase English letters and digits.
2024-07-11
1190. Reverse Substrings Between Each Pair of Parentheses
Topic: String, Stack
Difficulty: Medium
Problem:
You are given a string
Reverse the strings in each pair of matching parentheses, starting from the innermost one.
Your result should not contain any brackets.
Example 1:
Example 2:
Example 3:
Constraints:
•
•
• It is guaranteed that all parentheses are balanced.
1190. Reverse Substrings Between Each Pair of Parentheses
Topic: String, Stack
Difficulty: Medium
Problem:
You are given a string
s that consists of lower case English letters and brackets.Reverse the strings in each pair of matching parentheses, starting from the innermost one.
Your result should not contain any brackets.
Example 1:
Input: s = "(abcd)"
Output: "dcba"
Example 2:
Input: s = "(u(love)i)"
Output: "iloveu"
Explanation: The substring "love" is reversed first, then the whole string is reversed.
Example 3:
Input: s = "(ed(et(oc))el)"
Output: "leetcode"
Explanation: First, we reverse the substring "oc", then "etco", and finally, the whole string.
Constraints:
•
1 <= s.length <= 2000•
s only contains lower case English characters and parentheses.• It is guaranteed that all parentheses are balanced.
2024-07-12
1717. Maximum Score From Removing Substrings
Topic: String, Stack, Greedy
Difficulty: Medium
Problem:
You are given a string
• Remove substring
• For example, when removing
• Remove substring
• For example, when removing
Return the maximum points you can gain after applying the above operations on
Example 1:
Example 2:
Constraints:
•
•
•
1717. Maximum Score From Removing Substrings
Topic: String, Stack, Greedy
Difficulty: Medium
Problem:
You are given a string
s and two integers x and y. You can perform two types of operations any number of times.• Remove substring
"ab" and gain x points.• For example, when removing
"ab" from "cabxbae" it becomes "cxbae".• Remove substring
"ba" and gain y points.• For example, when removing
"ba" from "cabxbae" it becomes "cabxe".Return the maximum points you can gain after applying the above operations on
s.Example 1:
Input: s = "cdbcbbaaabab", x = 4, y = 5
Output: 19
Explanation:
- Remove the "ba" underlined in "cdbcbbaaabab". Now, s = "cdbcbbaaab" and 5 points are added to the score.
- Remove the "ab" underlined in "cdbcbbaaab". Now, s = "cdbcbbaa" and 4 points are added to the score.
- Remove the "ba" underlined in "cdbcbbaa". Now, s = "cdbcba" and 5 points are added to the score.
- Remove the "ba" underlined in "cdbcba". Now, s = "cdbc" and 5 points are added to the score.
Total score = 5 + 4 + 5 + 5 = 19.
Example 2:
Input: s = "aabbaaxybbaabb", x = 5, y = 4
Output: 20
Constraints:
•
1 <= s.length <= 10^5•
1 <= x, y <= 10^4•
s consists of lowercase English letters.2024-07-13
2751. Robot Collisions
Topic: Array, Stack, Sorting, Simulation
Difficulty: Hard
Problem:
There are
You are given 0-indexed integer arrays
All robots start moving on the line simultaneously at the same speed in their given directions. If two robots ever share the same position while moving, they will collide.
If two robots collide, the robot with lower health is removed from the line, and the health of the other robot decreases by one. The surviving robot continues in the same direction it was going. If both robots have the same health, they are both removed from the line.
Your task is to determine the health of the robots that survive the collisions, in the same order that the robots were given, i.e. final heath of robot 1 (if survived), final health of robot 2 (if survived), and so on. If there are no survivors, return an empty array.
Return an array containing the health of the remaining robots (in the order they were given in the input), after no further collisions can occur.
Note: The positions may be unsorted.
Example 1:
Image: https://assets.leetcode.com/uploads/2023/05/15/image-20230516011718-12.png
Example 2:
Image: https://assets.leetcode.com/uploads/2023/05/15/image-20230516004433-7.png
Example 3:
Image: https://assets.leetcode.com/uploads/2023/05/15/image-20230516005114-9.png
Constraints:
•
•
•
• All values in
2751. Robot Collisions
Topic: Array, Stack, Sorting, Simulation
Difficulty: Hard
Problem:
There are
n 1-indexed robots, each having a position on a line, health, and movement direction.You are given 0-indexed integer arrays
positions, healths, and a string directions (directions[i] is either 'L' for left or 'R' for right). All integers in positions are unique.All robots start moving on the line simultaneously at the same speed in their given directions. If two robots ever share the same position while moving, they will collide.
If two robots collide, the robot with lower health is removed from the line, and the health of the other robot decreases by one. The surviving robot continues in the same direction it was going. If both robots have the same health, they are both removed from the line.
Your task is to determine the health of the robots that survive the collisions, in the same order that the robots were given, i.e. final heath of robot 1 (if survived), final health of robot 2 (if survived), and so on. If there are no survivors, return an empty array.
Return an array containing the health of the remaining robots (in the order they were given in the input), after no further collisions can occur.
Note: The positions may be unsorted.
Example 1:
Image: https://assets.leetcode.com/uploads/2023/05/15/image-20230516011718-12.png
Input: positions = [5,4,3,2,1], healths = [2,17,9,15,10], directions = "RRRRR"
Output: [2,17,9,15,10]
Explanation: No collision occurs in this example, since all robots are moving in the same direction. So, the health of the robots in order from the first robot is returned, [2, 17, 9, 15, 10].
Example 2:
Image: https://assets.leetcode.com/uploads/2023/05/15/image-20230516004433-7.png
Input: positions = [3,5,2,6], healths = [10,10,15,12], directions = "RLRL"
Output: [14]
Explanation: There are 2 collisions in this example. Firstly, robot 1 and robot 2 will collide, and since both have the same health, they will be removed from the line. Next, robot 3 and robot 4 will collide and since robot 4's health is smaller, it gets removed, and robot 3's health becomes 15 - 1 = 14. Only robot 3 remains, so we return [14].
Example 3:
Image: https://assets.leetcode.com/uploads/2023/05/15/image-20230516005114-9.png
Input: positions = [1,2,5,6], healths = [10,10,11,11], directions = "RLRL"
Output: []
Explanation: Robot 1 and robot 2 will collide and since both have the same health, they are both removed. Robot 3 and 4 will collide and since both have the same health, they are both removed. So, we return an empty array, [].
Constraints:
•
1 <= positions.length == healths.length == directions.length == n <= 10^5•
1 <= positions[i], healths[i] <= 10^9•
directions[i] == 'L' or directions[i] == 'R'• All values in
positions are distinct