2022-03-02
392. Is Subsequence
Topic: Two Pointers, String, Dynamic Programming
Difficulty: Easy
Problem:
Given two strings
A subsequence of a string is a new string that is formed from the original string by deleting some (can be none) of the characters without disturbing the relative positions of the remaining characters. (i.e.,
Example 1:
Example 2:
Constraints:
•
•
•
Follow up: Suppose there are lots of incoming
392. Is Subsequence
Topic: Two Pointers, String, Dynamic Programming
Difficulty: Easy
Problem:
Given two strings
s and t, return true if s is a subsequence of t, or false otherwise.A subsequence of a string is a new string that is formed from the original string by deleting some (can be none) of the characters without disturbing the relative positions of the remaining characters. (i.e.,
"ace" is a subsequence of "abcde" while "aec" is not).Example 1:
Input: s = "abc", t = "ahbgdc"
Output: true
Example 2:
Input: s = "axc", t = "ahbgdc"
Output: false
Constraints:
•
0 <= s.length <= 100•
0 <= t.length <= 10^4•
s and t consist only of lowercase English letters.Follow up: Suppose there are lots of incoming
s, say s_1, s_2, ..., s_k where k >= 10^9, and you want to check one by one to see if t has its subsequence. In this scenario, how would you change your code?2022-03-03
413. Arithmetic Slices
Topic: Array, Dynamic Programming
Difficulty: Medium
Problem:
An integer array is called arithmetic if it consists of at least three elements and if the difference between any two consecutive elements is the same.
• For example,
Given an integer array
A subarray is a contiguous subsequence of the array.
Example 1:
Example 2:
Constraints:
•
•
413. Arithmetic Slices
Topic: Array, Dynamic Programming
Difficulty: Medium
Problem:
An integer array is called arithmetic if it consists of at least three elements and if the difference between any two consecutive elements is the same.
• For example,
[1,3,5,7,9], [7,7,7,7], and [3,-1,-5,-9] are arithmetic sequences.Given an integer array
nums, return the number of arithmetic subarrays of nums.A subarray is a contiguous subsequence of the array.
Example 1:
Input: nums = [1,2,3,4]
Output: 3
Explanation: We have 3 arithmetic slices in nums: [1, 2, 3], [2, 3, 4] and [1,2,3,4] itself.
Example 2:
Input: nums = [1]
Output: 0
Constraints:
•
1 <= nums.length <= 5000•
-1000 <= nums[i] <= 10002022-03-04
799. Champagne Tower
Topic: Dynamic Programming
Difficulty: Medium
Problem:
We stack glasses in a pyramid, where the first row has
Then, some champagne is poured into the first glass at the top. When the topmost glass is full, any excess liquid poured will fall equally to the glass immediately to the left and right of it. When those glasses become full, any excess champagne will fall equally to the left and right of those glasses, and so on. (A glass at the bottom row has its excess champagne fall on the floor.)
For example, after one cup of champagne is poured, the top most glass is full. After two cups of champagne are poured, the two glasses on the second row are half full. After three cups of champagne are poured, those two cups become full - there are 3 full glasses total now. After four cups of champagne are poured, the third row has the middle glass half full, and the two outside glasses are a quarter full, as pictured below.
Image: https://s3-lc-upload.s3.amazonaws.com/uploads/2018/03/09/tower.png
Now after pouring some non-negative integer cups of champagne, return how full the
Example 1:
Example 2:
Example 3:
Constraints:
•
•
799. Champagne Tower
Topic: Dynamic Programming
Difficulty: Medium
Problem:
We stack glasses in a pyramid, where the first row has
1 glass, the second row has 2 glasses, and so on until the 100^th row. Each glass holds one cup of champagne.Then, some champagne is poured into the first glass at the top. When the topmost glass is full, any excess liquid poured will fall equally to the glass immediately to the left and right of it. When those glasses become full, any excess champagne will fall equally to the left and right of those glasses, and so on. (A glass at the bottom row has its excess champagne fall on the floor.)
For example, after one cup of champagne is poured, the top most glass is full. After two cups of champagne are poured, the two glasses on the second row are half full. After three cups of champagne are poured, those two cups become full - there are 3 full glasses total now. After four cups of champagne are poured, the third row has the middle glass half full, and the two outside glasses are a quarter full, as pictured below.
Image: https://s3-lc-upload.s3.amazonaws.com/uploads/2018/03/09/tower.png
Now after pouring some non-negative integer cups of champagne, return how full the
j^th glass in the i^th row is (both i and j are 0-indexed.)Example 1:
Input: poured = 1, query\_row = 1, query\_glass = 1
Output: 0.00000
Explanation: We poured 1 cup of champange to the top glass of the tower (which is indexed as (0, 0)). There will be no excess liquid so all the glasses under the top glass will remain empty.
Example 2:
Input: poured = 2, query\_row = 1, query\_glass = 1
Output: 0.50000
Explanation: We poured 2 cups of champange to the top glass of the tower (which is indexed as (0, 0)). There is one cup of excess liquid. The glass indexed as (1, 0) and the glass indexed as (1, 1) will share the excess liquid equally, and each will get half cup of champange.
Example 3:
Input: poured = 100000009, query\_row = 33, query\_glass = 17
Output: 1.00000
Constraints:
•
0 <= poured <= 10^9•
0 <= query_glass <= query_row < 1002022-03-05
740. Delete and Earn
Topic: Array, Hash Table, Dynamic Programming
Difficulty: Medium
Problem:
You are given an integer array
• Pick any
Return the maximum number of points you can earn by applying the above operation some number of times.
Example 1:
Example 2:
Constraints:
•
•
740. Delete and Earn
Topic: Array, Hash Table, Dynamic Programming
Difficulty: Medium
Problem:
You are given an integer array
nums. You want to maximize the number of points you get by performing the following operation any number of times:• Pick any
nums[i] and delete it to earn nums[i] points. Afterwards, you must delete every element equal to nums[i] - 1 and every element equal to nums[i] + 1.Return the maximum number of points you can earn by applying the above operation some number of times.
Example 1:
Input: nums = [3,4,2]
Output: 6
Explanation: You can perform the following operations:
- Delete 4 to earn 4 points. Consequently, 3 is also deleted. nums = [2].
- Delete 2 to earn 2 points. nums = [].
You earn a total of 6 points.
Example 2:
Input: nums = [2,2,3,3,3,4]
Output: 9
Explanation: You can perform the following operations:
- Delete a 3 to earn 3 points. All 2's and 4's are also deleted. nums = [3,3].
- Delete a 3 again to earn 3 points. nums = [3].
- Delete a 3 once more to earn 3 points. nums = [].
You earn a total of 9 points.
Constraints:
•
1 <= nums.length <= 2 * 10^4•
1 <= nums[i] <= 10^42022-03-06
1359. Count All Valid Pickup and Delivery Options
Topic: Math, Dynamic Programming, Combinatorics
Difficulty: Hard
Problem:
Given
Count all valid pickup/delivery possible sequences such that delivery(i) is always after of pickup(i).
Since the answer may be too large, return it modulo 10^9 + 7.
Example 1:
Example 2:
Example 3:
Constraints:
•
1359. Count All Valid Pickup and Delivery Options
Topic: Math, Dynamic Programming, Combinatorics
Difficulty: Hard
Problem:
Given
n orders, each order consist in pickup and delivery services. Count all valid pickup/delivery possible sequences such that delivery(i) is always after of pickup(i).
Since the answer may be too large, return it modulo 10^9 + 7.
Example 1:
Input: n = 1
Output: 1
Explanation: Unique order (P1, D1), Delivery 1 always is after of Pickup 1.
Example 2:
Input: n = 2
Output: 6
Explanation: All possible orders:
(P1,P2,D1,D2), (P1,P2,D2,D1), (P1,D1,P2,D2), (P2,P1,D1,D2), (P2,P1,D2,D1) and (P2,D2,P1,D1).
This is an invalid order (P1,D2,P2,D1) because Pickup 2 is after of Delivery 2.
Example 3:
Input: n = 3
Output: 90
Constraints:
•
1 <= n <= 5002022-03-07
21. Merge Two Sorted Lists
Topic: Linked List, Recursion
Difficulty: Easy
Problem:
You are given the heads of two sorted linked lists
Merge the two lists in a 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:
Image: https://assets.leetcode.com/uploads/2020/10/03/merge_ex1.jpg
Example 2:
Example 3:
Constraints:
• The number of nodes in both lists is in the range
•
• Both
21. Merge Two Sorted Lists
Topic: Linked List, Recursion
Difficulty: Easy
Problem:
You are given the heads of two sorted linked lists
list1 and list2.Merge the two lists in a 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:
Image: https://assets.leetcode.com/uploads/2020/10/03/merge_ex1.jpg
Input: list1 = [1,2,4], list2 = [1,3,4]
Output: [1,1,2,3,4,4]
Example 2:
Input: list1 = [], list2 = []
Output: []
Example 3:
Input: list1 = [], list2 = [0]
Output: [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.2022-03-08
141. Linked List Cycle
Topic: Hash Table, Linked List, Two Pointers
Difficulty: Easy
Problem:
Given
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
Return
Example 1:
Image: https://assets.leetcode.com/uploads/2018/12/07/circularlinkedlist.png
Example 2:
Image: https://assets.leetcode.com/uploads/2018/12/07/circularlinkedlist_test2.png
Example 3:
Image: https://assets.leetcode.com/uploads/2018/12/07/circularlinkedlist_test3.png
Constraints:
• The number of the nodes in the list is in the range
•
•
Follow up: Can you solve it using
141. Linked List Cycle
Topic: Hash Table, Linked List, Two Pointers
Difficulty: Easy
Problem:
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:
Image: https://assets.leetcode.com/uploads/2018/12/07/circularlinkedlist.png
Input: head = [3,2,0,-4], pos = 1
Output: true
Explanation: There is a cycle in the linked list, where the tail connects to the 1st node (0-indexed).
Example 2:
Image: https://assets.leetcode.com/uploads/2018/12/07/circularlinkedlist_test2.png
Input: head = [1,2], pos = 0
Output: true
Explanation: There is a cycle in the linked list, where the tail connects to the 0th node.
Example 3:
Image: https://assets.leetcode.com/uploads/2018/12/07/circularlinkedlist_test3.png
Input: head = [1], pos = -1
Output: false
Explanation: There is no cycle in the linked list.
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?2022-03-09
82. Remove Duplicates from Sorted List II
Topic: Linked List, Two Pointers
Difficulty: Medium
Problem:
Given the
Example 1:
Image: https://assets.leetcode.com/uploads/2021/01/04/linkedlist1.jpg
Example 2:
Image: https://assets.leetcode.com/uploads/2021/01/04/linkedlist2.jpg
Constraints:
• The number of nodes in the list is in the range
•
• The list is guaranteed to be sorted in ascending order.
82. Remove Duplicates from Sorted List II
Topic: Linked List, Two Pointers
Difficulty: Medium
Problem:
Given the
head of a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list. Return the linked list sorted as well.Example 1:
Image: https://assets.leetcode.com/uploads/2021/01/04/linkedlist1.jpg
Input: head = [1,2,3,3,4,4,5]
Output: [1,2,5]
Example 2:
Image: https://assets.leetcode.com/uploads/2021/01/04/linkedlist2.jpg
Input: head = [1,1,1,2,3]
Output: [2,3]
Constraints:
• The number of nodes in the list is in the range
[0, 300].•
-100 <= Node.val <= 100• The list is guaranteed to be sorted in ascending order.
2022-03-10
2. Add Two Numbers
Topic: Linked List, Math, Recursion
Difficulty: Medium
Problem:
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:
Image: https://assets.leetcode.com/uploads/2020/10/02/addtwonumber1.jpg
Example 2:
Example 3:
Constraints:
• The number of nodes in each linked list is in the range
•
• It is guaranteed that the list represents a number that does not have leading zeros.
2. Add Two Numbers
Topic: Linked List, Math, Recursion
Difficulty: Medium
Problem:
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:
Image: https://assets.leetcode.com/uploads/2020/10/02/addtwonumber1.jpg
Input: l1 = [2,4,3], l2 = [5,6,4]
Output: [7,0,8]
Explanation: 342 + 465 = 807.
Example 2:
Input: l1 = [0], l2 = [0]
Output: [0]
Example 3:
Input: l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
Output: [8,9,9,9,0,0,0,1]
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.
2022-03-11
61. Rotate List
Topic: Linked List, Two Pointers
Difficulty: Medium
Problem:
Given the
Example 1:
Image: https://assets.leetcode.com/uploads/2020/11/13/rotate1.jpg
Example 2:
Image: https://assets.leetcode.com/uploads/2020/11/13/roate2.jpg
Constraints:
• The number of nodes in the list is in the range
•
•
61. Rotate List
Topic: Linked List, Two Pointers
Difficulty: Medium
Problem:
Given the
head of a linked list, rotate the list to the right by k places.Example 1:
Image: https://assets.leetcode.com/uploads/2020/11/13/rotate1.jpg
Input: head = [1,2,3,4,5], k = 2
Output: [4,5,1,2,3]
Example 2:
Image: https://assets.leetcode.com/uploads/2020/11/13/roate2.jpg
Input: head = [0,1,2], k = 4
Output: [2,0,1]
Constraints:
• The number of nodes in the list is in the range
[0, 500].•
-100 <= Node.val <= 100•
0 <= k <= 2 * 10^92022-03-12
138. Copy List with Random Pointer
Topic: Hash Table, Linked List
Difficulty: Medium
Problem:
A linked list of length
Construct a deep copy of the list. The deep copy should consist of exactly
For example, if there are two nodes
Return the head of the copied linked list.
The linked list is represented in the input/output as a list of
•
•
Your code will only be given the
Example 1:
Image: https://assets.leetcode.com/uploads/2019/12/18/e1.png
Example 2:
Image: https://assets.leetcode.com/uploads/2019/12/18/e2.png
Example 3:
Image: https://assets.leetcode.com/uploads/2019/12/18/e3.png
Constraints:
•
•
•
138. Copy List with Random Pointer
Topic: Hash Table, Linked List
Difficulty: Medium
Problem:
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:
Image: https://assets.leetcode.com/uploads/2019/12/18/e1.png
Input: head = [[7,null],[13,0],[11,4],[10,2],[1,0]]
Output: [[7,null],[13,0],[11,4],[10,2],[1,0]]
Example 2:
Image: https://assets.leetcode.com/uploads/2019/12/18/e2.png
Input: head = [[1,1],[2,1]]
Output: [[1,1],[2,1]]
Example 3:
Image: https://assets.leetcode.com/uploads/2019/12/18/e3.png
Input: head = [[3,null],[3,0],[3,null]]
Output: [[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.2022-03-13
20. Valid Parentheses
Topic: String, Stack
Difficulty: Easy
Problem:
Given a string
An input string is valid if:
1. Open brackets must be closed by the same type of brackets.
2. Open brackets must be closed in the correct order.
Example 1:
Example 2:
Example 3:
Constraints:
•
•
20. Valid Parentheses
Topic: String, Stack
Difficulty: Easy
Problem:
Given a string
s containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid.An input string is valid if:
1. Open brackets must be closed by the same type of brackets.
2. Open brackets must be closed in the correct order.
Example 1:
Input: s = "()"
Output: true
Example 2:
Input: s = "()[]{}"
Output: true
Example 3:
Input: s = "(]"
Output: false
Constraints:
•
1 <= s.length <= 10^4•
s consists of parentheses only '()[]{}'.2022-03-14
71. Simplify Path
Topic: String, Stack
Difficulty: Medium
Problem:
Given a string
In a Unix-style file system, a period
The canonical path should have the following format:
• The path starts with a single slash
• Any two directories are separated by a single slash
• The path does not end with a trailing
• The path only contains the directories on the path from the root directory to the target file or directory (i.e., no period
Return the simplified canonical path.
Example 1:
Example 2:
Example 3:
Constraints:
•
•
•
71. Simplify Path
Topic: String, Stack
Difficulty: Medium
Problem:
Given a string
path, which is an absolute path (starting with a slash '/') to a file or directory in a Unix-style file system, convert it to the simplified canonical path.In a Unix-style file system, a period
'.' refers to the current directory, a double period '..' refers to the directory up a level, and any multiple consecutive slashes (i.e. '//') are treated as a single slash '/'. For this problem, any other format of periods such as '...' are treated as file/directory names.The canonical path should have the following format:
• The path starts with a single slash
'/'.• Any two directories are separated by a single slash
'/'.• The path does not end with a trailing
'/'.• The path only contains the directories on the path from the root directory to the target file or directory (i.e., no period
'.' or double period '..')Return the simplified canonical path.
Example 1:
Input: path = "/home/"
Output: "/home"
Explanation: Note that there is no trailing slash after the last directory name.
Example 2:
Input: path = "/../"
Output: "/"
Explanation: Going one level up from the root directory is a no-op, as the root level is the highest level you can go.
Example 3:
Input: path = "/home//foo/"
Output: "/home/foo"
Explanation: In the canonical path, multiple consecutive slashes are replaced by a single one.
Constraints:
•
1 <= path.length <= 3000•
path consists of English letters, digits, period '.', slash '/' or '_'.•
path is a valid absolute Unix path.2022-03-15
1249. Minimum Remove to Make Valid Parentheses
Topic: String, Stack
Difficulty: Medium
Problem:
Given a string s of
Your task is to remove the minimum number of parentheses (
Formally, a parentheses string is valid if and only if:
• It is the empty string, contains only lowercase characters, or
• It can be written as
• It can be written as
Example 1:
Example 2:
Example 3:
Constraints:
•
•
1249. Minimum Remove to Make Valid Parentheses
Topic: String, Stack
Difficulty: Medium
Problem:
Given a string s of
'(' , ')' and lowercase English characters.Your task is to remove the minimum number of parentheses (
'(' or ')', in any positions ) so that the resulting parentheses string is valid and return any valid string.Formally, a parentheses string is valid if and only if:
• It is the empty string, contains only lowercase characters, or
• It can be written as
AB (A concatenated with B), where A and B are valid strings, or• It can be written as
(A), where A is a valid string.Example 1:
Input: s = "lee(t(c)o)de)"
Output: "lee(t(c)o)de"
Explanation: "lee(t(co)de)" , "lee(t(c)ode)" would also be accepted.
Example 2:
Input: s = "a)b(c)d"
Output: "ab(c)d"
Example 3:
Input: s = "))(("
Output: ""
Explanation: An empty string is also valid.
Constraints:
•
1 <= s.length <= 10^5•
s[i] is either'(' , ')', or lowercase English letter.2022-03-16
946. Validate Stack Sequences
Topic: Array, Stack, Simulation
Difficulty: Medium
Problem:
Given two integer arrays
Example 1:
Example 2:
Constraints:
•
•
• All the elements of
•
•
946. Validate Stack Sequences
Topic: Array, Stack, Simulation
Difficulty: Medium
Problem:
Given two integer arrays
pushed and popped each with distinct values, return true if this could have been the result of a sequence of push and pop operations on an initially empty stack, or false otherwise.Example 1:
Input: pushed = [1,2,3,4,5], popped = [4,5,3,2,1]
Output: true
Explanation: We might do the following sequence:
push(1), push(2), push(3), push(4),
pop() -> 4,
push(5),
pop() -> 5, pop() -> 3, pop() -> 2, pop() -> 1
Example 2:
Input: pushed = [1,2,3,4,5], popped = [4,3,5,1,2]
Output: false
Explanation: 1 cannot be popped before 2.
Constraints:
•
1 <= pushed.length <= 1000•
0 <= pushed[i] <= 1000• All the elements of
pushed are unique.•
popped.length == pushed.length•
popped is a permutation of pushed.2022-03-17
856. Score of Parentheses
Topic: String, Stack
Difficulty: Medium
Problem:
Given a balanced parentheses string
The score of a balanced parentheses string is based on the following rule:
•
•
•
Example 1:
Example 2:
Example 3:
Constraints:
•
•
•
856. Score of Parentheses
Topic: String, Stack
Difficulty: Medium
Problem:
Given a balanced parentheses string
s, return the score of the string.The score of a balanced parentheses string is based on the following rule:
•
"()" has score 1.•
AB has score A + B, where A and B are balanced parentheses strings.•
(A) has score 2 * A, where A is a balanced parentheses string.Example 1:
Input: s = "()"
Output: 1
Example 2:
Input: s = "(())"
Output: 2
Example 3:
Input: s = "()()"
Output: 2
Constraints:
•
2 <= s.length <= 50•
s consists of only '(' and ')'.•
s is a balanced parentheses string.2022-03-18
316. Remove Duplicate Letters
Topic: String, Stack, Greedy, Monotonic Stack
Difficulty: Medium
Problem:
Given a string
Example 1:
Example 2:
Constraints:
•
•
Note: This question is the same as 1081: <https://leetcode.com/problems/smallest-subsequence-of-distinct-characters/>
316. Remove Duplicate Letters
Topic: String, Stack, Greedy, Monotonic Stack
Difficulty: Medium
Problem:
Given a string
s, remove duplicate letters so that every letter appears once and only once. You must make sure your result is the smallest in lexicographical order among all possible results.Example 1:
Input: s = "bcabc"
Output: "abc"
Example 2:
Input: s = "cbacdcbc"
Output: "acdb"
Constraints:
•
1 <= s.length <= 10^4•
s consists of lowercase English letters.Note: This question is the same as 1081: <https://leetcode.com/problems/smallest-subsequence-of-distinct-characters/>
2022-03-19
895. Maximum Frequency Stack
Topic: Hash Table, Stack, Design, Ordered Set
Difficulty: Hard
Problem:
Design a stack-like data structure to push elements to the stack and pop the most frequent element from the stack.
Implement the
•
•
•
• If there is a tie for the most frequent element, the element closest to the stack's top is removed and returned.
Example 1:
Constraints:
•
• At most
• It is guaranteed that there will be at least one element in the stack before calling
895. Maximum Frequency Stack
Topic: Hash Table, Stack, Design, Ordered Set
Difficulty: Hard
Problem:
Design a stack-like data structure to push elements to the stack and pop the most frequent element from the stack.
Implement the
FreqStack class:•
FreqStack() constructs an empty frequency stack.•
void push(int val) pushes an integer val onto the top of the stack.•
int pop() removes and returns the most frequent element in the stack.• If there is a tie for the most frequent element, the element closest to the stack's top is removed and returned.
Example 1:
Input
["FreqStack", "push", "push", "push", "push", "push", "push", "pop", "pop", "pop", "pop"]
[[], [5], [7], [5], [7], [4], [5], [], [], [], []]
Output
[null, null, null, null, null, null, null, 5, 7, 5, 4]
Explanation
FreqStack freqStack = new FreqStack();
freqStack.push(5); // The stack is [5]
freqStack.push(7); // The stack is [5,7]
freqStack.push(5); // The stack is [5,7,5]
freqStack.push(7); // The stack is [5,7,5,7]
freqStack.push(4); // The stack is [5,7,5,7,4]
freqStack.push(5); // The stack is [5,7,5,7,4,5]
freqStack.pop(); // return 5, as 5 is the most frequent. The stack becomes [5,7,5,7,4].
freqStack.pop(); // return 7, as 5 and 7 is the most frequent, but 7 is closest to the top. The stack becomes [5,7,5,4].
freqStack.pop(); // return 5, as 5 is the most frequent. The stack becomes [5,7,4].
freqStack.pop(); // return 4, as 4, 5 and 7 is the most frequent, but 4 is closest to the top. The stack becomes [5,7].
Constraints:
•
0 <= val <= 10^9• At most
2 * 10^4 calls will be made to push and pop.• It is guaranteed that there will be at least one element in the stack before calling
pop.2022-03-20
1007. Minimum Domino Rotations For Equal Row
Topic: Array, Greedy
Difficulty: Medium
Problem:
In a row of dominoes,
We may rotate the
Return the minimum number of rotations so that all the values in
If it cannot be done, return
Example 1:
Image: https://assets.leetcode.com/uploads/2021/05/14/domino.png
Example 2:
Constraints:
•
•
•
1007. Minimum Domino Rotations For Equal Row
Topic: Array, Greedy
Difficulty: Medium
Problem:
In a row of dominoes,
tops[i] and bottoms[i] represent the top and bottom halves of the i^th domino. (A domino is a tile with two numbers from 1 to 6 - one on each half of the tile.)We may rotate the
i^th domino, so that tops[i] and bottoms[i] swap values.Return the minimum number of rotations so that all the values in
tops are the same, or all the values in bottoms are the same.If it cannot be done, return
-1.Example 1:
Image: https://assets.leetcode.com/uploads/2021/05/14/domino.png
Input: tops = [2,1,2,4,2,2], bottoms = [5,2,6,2,3,2]
Output: 2
Explanation:
The first figure represents the dominoes as given by tops and bottoms: before we do any rotations.
If we rotate the second and fourth dominoes, we can make every value in the top row equal to 2, as indicated by the second figure.
Example 2:
Input: tops = [3,5,1,2,3], bottoms = [3,6,3,3,4]
Output: -1
Explanation:
In this case, it is not possible to rotate the dominoes to make one row of values equal.
Constraints:
•
2 <= tops.length <= 2 * 10^4•
bottoms.length == tops.length•
1 <= tops[i], bottoms[i] <= 62022-03-21
763. Partition Labels
Topic: Hash Table, Two Pointers, String, Greedy
Difficulty: Medium
Problem:
You are given a string
Note that the partition is done so that after concatenating all the parts in order, the resultant string should be
Return a list of integers representing the size of these parts.
Example 1:
Example 2:
Constraints:
•
•
763. Partition Labels
Topic: Hash Table, Two Pointers, String, Greedy
Difficulty: Medium
Problem:
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.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:
Input: s = "ababcbacadefegdehijhklij"
Output: [9,7,8]
Explanation:
The partition is "ababcbaca", "defegde", "hijhklij".
This is a partition so that each letter appears in at most one part.
A partition like "ababcbacadefegde", "hijhklij" is incorrect, because it splits s into less parts.
Example 2:
Input: s = "eccbbbbdec"
Output: [10]
Constraints:
•
1 <= s.length <= 500•
s consists of lowercase English letters.2022-03-22
1663. Smallest String With A Given Numeric Value
Topic: String, Greedy
Difficulty: Medium
Problem:
The numeric value of a lowercase character is defined as its position
The numeric value of a string consisting of lowercase characters is defined as the sum of its characters' numeric values. For example, the numeric value of the string
You are given two integers
Note that a string
Example 1:
Example 2:
Constraints:
•
•
1663. Smallest String With A Given Numeric Value
Topic: String, Greedy
Difficulty: Medium
Problem:
The numeric value of a lowercase character is defined as its position
(1-indexed) in the alphabet, so the numeric value of a is 1, the numeric value of b is 2, the numeric value of c is 3, and so on.The numeric value of a string consisting of lowercase characters is defined as the sum of its characters' numeric values. For example, the numeric value of the string
"abe" is equal to 1 + 2 + 5 = 8.You are given two integers
n and k. Return the lexicographically smallest string with length equal to n and numeric value equal to k.Note that a string
x is lexicographically smaller than string y if x comes before y in dictionary order, that is, either x is a prefix of y, or if i is the first position such that x[i] != y[i], then x[i] comes before y[i] in alphabetic order.Example 1:
Input: n = 3, k = 27
Output: "aay"
Explanation: The numeric value of the string is 1 + 1 + 25 = 27, and it is the smallest string with such a value and length equal to 3.
Example 2:
Input: n = 5, k = 73
Output: "aaszz"
Constraints:
•
1 <= n <= 10^5•
n <= k <= 26 * n