diff --git a/solution/2900-2999/2992.Number of Self-Divisible Permutations/README.md b/solution/2900-2999/2992.Number of Self-Divisible Permutations/README.md new file mode 100644 index 0000000000000..571460593765b --- /dev/null +++ b/solution/2900-2999/2992.Number of Self-Divisible Permutations/README.md @@ -0,0 +1,341 @@ +# [2992. Number of Self-Divisible Permutations](https://leetcode.cn/problems/number-of-self-divisible-permutations) + +[English Version](/solution/2900-2999/2992.Number%20of%20Self-Divisible%20Permutations/README_EN.md) + +## 题目描述 + + + +

Given an integer n, return the number of permutations of the 1-indexed array nums = [1, 2, ..., n], such that it's self-divisible.

+ +

Array nums is self-divisible if for every 1 <= i <= n, at least one of the following conditions holds:

+ + + +

A permutation of an array is a rearrangement of the elements of that array, for example here are all of the permutations of the array [1, 2, 3]:

+ + + +

 

+

Example 1:

+ +
+Input: n = 1
+Output: 1
+Explanation: The array [1] has only 1 permutation which is self-divisible.
+
+ +

Example 2:

+ +
+Input: n = 2
+Output: 2
+Explanation: The array [1,2] has 2 permutations both of which are self-divisible:
+nums = [1,2]: This is self-divisible since nums[1] % 1 == 0 and nums[2] % 2 == 0.
+nums = [2,1]: This is self-divisible since nums[1] % 1 == 0 and 2 % nums[2] == 0.
+
+ +

Example 3:

+ +
+Input: n = 3
+Output: 3
+Explanation: The array [1,2,3] has 3 self-divisble permutations: [1,2,3], [2,1,3], [3,2,1].
+It can be shown that the other 3 permutations are not self-divisible. Hence the answer is 3.
+
+ +

 

+

Constraints:

+ + + +## 解法 + + + +**方法一:状态压缩 + 记忆化搜索** + +我们可以用一个二进制数 $mask$ 来表示当前排列的状态,其中第 $i$ 位为 $1$ 表示数字 $i$ 已经被使用,为 $0$ 表示数字 $i$ 还未被使用。 + +那么,我们设计一个函数 $dfs(mask)$,表示从当前排列的状态 $mask$ 开始,能够构造出的满足题目要求的排列的数量。答案即为 $dfs(0)$。 + +我们可以用记忆化搜索的方法来计算 $dfs(mask)$ 的值。 + +在计算 $dfs(mask)$ 的过程中,我们用 $i$ 表示当前要加入排列的是第几个数字,如果 $i \gt n$,说明排列已经构造完毕,我们可以返回 $1$。 + +否则,我们枚举当前排列中还未被使用的数字 $j$,如果 $i$ 和 $j$ 满足题目要求,那么我们就可以将 $j$ 加入排列中,此时状态变为 $mask \mid 2^j$,其中 $|$ 表示按位或运算。由于 $j$ 已经被使用,因此我们需要递归计算 $dfs(mask \mid 2^j)$ 的值,并将其累加到 $dfs(mask)$ 上。 + +最终,我们可以得到 $dfs(0)$ 的值,即为答案。 + +时间复杂度 $O(n \times 2^n)$,空间复杂度 $O(2^n)$。其中 $n$ 为排列的长度。 + +**方法二:状态压缩 + 动态规划** + +我们可以将方法一中的记忆化搜索改写为动态规划的形式,定义 $f[mask]$ 表示当前排列的状态为 $mask$,且满足题目要求的排列的数量。初始时 $f[0]=1$,其余值均为 $0$。 + +我们在 $[0, 2^n)$ 的范围内枚举 $mask$,对于每个 $mask$,我们用 $i$ 表示当前最后一个加入排列的是第几个数字,然后我们枚举当前排列中最后一个加入的数字 $j$,如果 $i$ 和 $j$ 满足题目要求,那么状态 $f[mask]$ 就可以从状态 $f[mask \oplus 2^(j-1)]$ 转移而来,其中 $\oplus$ 表示按位异或运算。我们将所有转移得到的状态 $f[mask \oplus 2^(j-1)]$ 的值累加到 $f[mask]$ 上,即为 $f[mask]$ 的值。 + +最终,我们可以得到 $f[2^n - 1]$ 的值,即为答案。 + +时间复杂度 $O(n \times 2^n)$,空间复杂度 $O(2^n)$。其中 $n$ 为排列的长度。 + + + +### **Python3** + + + +```python +class Solution: + def selfDivisiblePermutationCount(self, n: int) -> int: + @cache + def dfs(mask: int) -> int: + i = mask.bit_count() + 1 + if i > n: + return 1 + ans = 0 + for j in range(1, n + 1): + if (mask >> j & 1) == 0 and (i % j == 0 or j % i == 0): + ans += dfs(mask | 1 << j) + return ans + + return dfs(0) +``` + +```python +class Solution: + def selfDivisiblePermutationCount(self, n: int) -> int: + f = [0] * (1 << n) + f[0] = 1 + for mask in range(1 << n): + i = mask.bit_count() + for j in range(1, n + 1): + if (mask >> (j - 1) & 1) == 1 and (i % j == 0 or j % i == 0): + f[mask] += f[mask ^ (1 << (j - 1))] + return f[-1] +``` + +### **Java** + + + +```java +class Solution { + private int n; + private Integer[] f; + + public int selfDivisiblePermutationCount(int n) { + this.n = n; + f = new Integer[1 << (n + 1)]; + return dfs(0); + } + + private int dfs(int mask) { + if (f[mask] != null) { + return f[mask]; + } + int i = Integer.bitCount(mask) + 1; + if (i > n) { + return 1; + } + f[mask] = 0; + for (int j = 1; j <= n; ++j) { + if ((mask >> j & 1) == 0 && (i % j == 0 || j % i == 0)) { + f[mask] += dfs(mask | 1 << j); + } + } + return f[mask]; + } +} +``` + +```java +class Solution { + public int selfDivisiblePermutationCount(int n) { + int[] f = new int[1 << n]; + f[0] = 1; + for (int mask = 0; mask < 1 << n; ++mask) { + int i = Integer.bitCount(mask); + for (int j = 1; j <= n; ++j) { + if (((mask >> (j - 1)) & 1) == 1 && (i % j == 0 || j % i == 0)) { + f[mask] += f[mask ^ (1 << (j - 1))]; + } + } + } + return f[(1 << n) - 1]; + } +} +``` + +### **C++** + +```cpp +class Solution { +public: + int selfDivisiblePermutationCount(int n) { + int f[1 << (n + 1)]; + memset(f, -1, sizeof(f)); + function dfs = [&](int mask) { + if (f[mask] != -1) { + return f[mask]; + } + int i = __builtin_popcount(mask) + 1; + if (i > n) { + return 1; + } + f[mask] = 0; + for (int j = 1; j <= n; ++j) { + if ((mask >> j & 1) == 0 && (i % j == 0 || j % i == 0)) { + f[mask] += dfs(mask | 1 << j); + } + } + return f[mask]; + }; + return dfs(0); + } +}; +``` + +```cpp +class Solution { +public: + int selfDivisiblePermutationCount(int n) { + int f[1 << n]; + memset(f, 0, sizeof(f)); + f[0] = 1; + for (int mask = 0; mask < 1 << n; ++mask) { + int i = __builtin_popcount(mask); + for (int j = 1; j <= n; ++j) { + if (((mask >> (j - 1)) & 1) == 1 && (i % j == 0 || j % i == 0)) { + f[mask] += f[mask ^ (1 << (j - 1))]; + } + } + } + return f[(1 << n) - 1]; + } +}; +``` + +### **Go** + +```go +func selfDivisiblePermutationCount(n int) int { + f := make([]int, 1<<(n+1)) + for i := range f { + f[i] = -1 + } + var dfs func(int) int + dfs = func(mask int) int { + if f[mask] != -1 { + return f[mask] + } + i := bits.OnesCount(uint(mask)) + 1 + if i > n { + return 1 + } + f[mask] = 0 + for j := 1; j <= n; j++ { + if mask>>j&1 == 0 && (i%j == 0 || j%i == 0) { + f[mask] += dfs(mask | 1<>(j-1)&1 == 1 && (i%j == 0 || j%i == 0) { + f[mask] += f[mask^(1<<(j-1))] + } + } + } + return f[(1< { + if (f[mask] !== -1) { + return f[mask]; + } + const i = bitCount(mask) + 1; + if (i > n) { + return 1; + } + f[mask] = 0; + for (let j = 1; j <= n; ++j) { + if (((mask >> j) & 1) === 0 && (i % j === 0 || j % i === 0)) { + f[mask] += dfs(mask | (1 << j)); + } + } + return f[mask]; + }; + return dfs(0); +} + +function bitCount(i: number): number { + i = i - ((i >>> 1) & 0x55555555); + i = (i & 0x33333333) + ((i >>> 2) & 0x33333333); + i = (i + (i >>> 4)) & 0x0f0f0f0f; + i = i + (i >>> 8); + i = i + (i >>> 16); + return i & 0x3f; +} +``` + +```ts +function selfDivisiblePermutationCount(n: number): number { + const f: number[] = Array(1 << n).fill(0); + f[0] = 1; + for (let mask = 0; mask < 1 << n; ++mask) { + const i = bitCount(mask); + for (let j = 1; j <= n; ++j) { + if ((mask >> (j - 1)) & 1 && (i % j === 0 || j % i === 0)) { + f[mask] += f[mask ^ (1 << (j - 1))]; + } + } + } + return f.at(-1)!; +} + +function bitCount(i: number): number { + i = i - ((i >>> 1) & 0x55555555); + i = (i & 0x33333333) + ((i >>> 2) & 0x33333333); + i = (i + (i >>> 4)) & 0x0f0f0f0f; + i = i + (i >>> 8); + i = i + (i >>> 16); + return i & 0x3f; +} +``` + +### **...** + +``` + +``` + + diff --git a/solution/2900-2999/2992.Number of Self-Divisible Permutations/README_EN.md b/solution/2900-2999/2992.Number of Self-Divisible Permutations/README_EN.md new file mode 100644 index 0000000000000..85d596213d6c3 --- /dev/null +++ b/solution/2900-2999/2992.Number of Self-Divisible Permutations/README_EN.md @@ -0,0 +1,333 @@ +# [2992. Number of Self-Divisible Permutations](https://leetcode.com/problems/number-of-self-divisible-permutations) + +[中文文档](/solution/2900-2999/2992.Number%20of%20Self-Divisible%20Permutations/README.md) + +## Description + +

Given an integer n, return the number of permutations of the 1-indexed array nums = [1, 2, ..., n], such that it's self-divisible.

+ +

Array nums is self-divisible if for every 1 <= i <= n, at least one of the following conditions holds:

+ +
    +
  • nums[i] % i == 0
  • +
  • i % nums[i] == 0
  • +
+ +

A permutation of an array is a rearrangement of the elements of that array, for example here are all of the permutations of the array [1, 2, 3]:

+ +
    +
  • [1, 2, 3]
  • +
  • [1, 3, 2]
  • +
  • [2, 1, 3]
  • +
  • [2, 3, 1]
  • +
  • [3, 1, 2]
  • +
  • [3, 2, 1]
  • +
+ +

 

+

Example 1:

+ +
+Input: n = 1
+Output: 1
+Explanation: The array [1] has only 1 permutation which is self-divisible.
+
+ +

Example 2:

+ +
+Input: n = 2
+Output: 2
+Explanation: The array [1,2] has 2 permutations both of which are self-divisible:
+nums = [1,2]: This is self-divisible since nums[1] % 1 == 0 and nums[2] % 2 == 0.
+nums = [2,1]: This is self-divisible since nums[1] % 1 == 0 and 2 % nums[2] == 0.
+
+ +

Example 3:

+ +
+Input: n = 3
+Output: 3
+Explanation: The array [1,2,3] has 3 self-divisble permutations: [1,2,3], [2,1,3], [3,2,1].
+It can be shown that the other 3 permutations are not self-divisible. Hence the answer is 3.
+
+ +

 

+

Constraints:

+ +
    +
  • 1 <= n <= 15
  • +
+ +## Solutions + +**Solution 1: State Compression + Memoization Search** + +We can use a binary number $mask$ to represent the current permutation state, where the $i$-th bit is $1$ indicates that the number $i$ has been used, and $0$ indicates that the number $i$ has not been used yet. + +Then, we design a function $dfs(mask)$, which represents the number of permutations that can be constructed from the current permutation state $mask$ and meet the requirements of the problem. The answer is $dfs(0)$. + +We can use the method of memoization search to calculate the value of $dfs(mask)$. + +In the process of calculating $dfs(mask)$, we use $i$ to indicate which number is to be added to the permutation. If $i \gt n$, it means that the permutation has been constructed, and we can return $1$. + +Otherwise, we enumerate the numbers $j$ that have not been used in the current permutation. If $i$ and $j$ meet the requirements of the problem, then we can add $j$ to the permutation. At this time, the state becomes $mask \mid 2^j$, where $|$ represents bitwise OR operation. Since $j$ has been used, we need to recursively calculate the value of $dfs(mask \mid 2^j)$ and add it to $dfs(mask)$. + +Finally, we can get the value of $dfs(0)$, which is the answer. + +The time complexity is $O(n \times 2^n)$, and the space complexity is $O(2^n)$. Where $n$ is the length of the permutation. + +**Solution 2: State Compression + Dynamic Programming** + +We can rewrite the memoization search in Solution 1 into the form of dynamic programming, define $f[mask]$ to represent the number of permutations that the current permutation state is $mask$ and meet the requirements of the problem. Initially, $f[0]=1$, and the rest are $0$. + +We enumerate $mask$ in the range of $[0, 2^n)$, for each $mask$, we use $i$ to represent which number is the last one to join the permutation, then we enumerate the last number $j$ added to the current permutation. If $i$ and $j$ meet the requirements of the problem, then the state $f[mask]$ can be transferred from the state $f[mask \oplus 2^(j-1)]$, where $\oplus$ represents bitwise XOR operation. We add all the values of the transferred state $f[mask \oplus 2^(j-1)]$ to $f[mask]$, which is the value of $f[mask]$. + +Finally, we can get the value of $f[2^n - 1]$, which is the answer. + +The time complexity is $O(n \times 2^n)$, and the space complexity is $O(2^n)$. Where $n$ is the length of the permutation. + + + +### **Python3** + +```python +class Solution: + def selfDivisiblePermutationCount(self, n: int) -> int: + @cache + def dfs(mask: int) -> int: + i = mask.bit_count() + 1 + if i > n: + return 1 + ans = 0 + for j in range(1, n + 1): + if (mask >> j & 1) == 0 and (i % j == 0 or j % i == 0): + ans += dfs(mask | 1 << j) + return ans + + return dfs(0) +``` + +```python +class Solution: + def selfDivisiblePermutationCount(self, n: int) -> int: + f = [0] * (1 << n) + f[0] = 1 + for mask in range(1 << n): + i = mask.bit_count() + for j in range(1, n + 1): + if (mask >> (j - 1) & 1) == 1 and (i % j == 0 or j % i == 0): + f[mask] += f[mask ^ (1 << (j - 1))] + return f[-1] +``` + +### **Java** + +```java +class Solution { + private int n; + private Integer[] f; + + public int selfDivisiblePermutationCount(int n) { + this.n = n; + f = new Integer[1 << (n + 1)]; + return dfs(0); + } + + private int dfs(int mask) { + if (f[mask] != null) { + return f[mask]; + } + int i = Integer.bitCount(mask) + 1; + if (i > n) { + return 1; + } + f[mask] = 0; + for (int j = 1; j <= n; ++j) { + if ((mask >> j & 1) == 0 && (i % j == 0 || j % i == 0)) { + f[mask] += dfs(mask | 1 << j); + } + } + return f[mask]; + } +} +``` + +```java +class Solution { + public int selfDivisiblePermutationCount(int n) { + int[] f = new int[1 << n]; + f[0] = 1; + for (int mask = 0; mask < 1 << n; ++mask) { + int i = Integer.bitCount(mask); + for (int j = 1; j <= n; ++j) { + if (((mask >> (j - 1)) & 1) == 1 && (i % j == 0 || j % i == 0)) { + f[mask] += f[mask ^ (1 << (j - 1))]; + } + } + } + return f[(1 << n) - 1]; + } +} +``` + +### **C++** + +```cpp +class Solution { +public: + int selfDivisiblePermutationCount(int n) { + int f[1 << (n + 1)]; + memset(f, -1, sizeof(f)); + function dfs = [&](int mask) { + if (f[mask] != -1) { + return f[mask]; + } + int i = __builtin_popcount(mask) + 1; + if (i > n) { + return 1; + } + f[mask] = 0; + for (int j = 1; j <= n; ++j) { + if ((mask >> j & 1) == 0 && (i % j == 0 || j % i == 0)) { + f[mask] += dfs(mask | 1 << j); + } + } + return f[mask]; + }; + return dfs(0); + } +}; +``` + +```cpp +class Solution { +public: + int selfDivisiblePermutationCount(int n) { + int f[1 << n]; + memset(f, 0, sizeof(f)); + f[0] = 1; + for (int mask = 0; mask < 1 << n; ++mask) { + int i = __builtin_popcount(mask); + for (int j = 1; j <= n; ++j) { + if (((mask >> (j - 1)) & 1) == 1 && (i % j == 0 || j % i == 0)) { + f[mask] += f[mask ^ (1 << (j - 1))]; + } + } + } + return f[(1 << n) - 1]; + } +}; +``` + +### **Go** + +```go +func selfDivisiblePermutationCount(n int) int { + f := make([]int, 1<<(n+1)) + for i := range f { + f[i] = -1 + } + var dfs func(int) int + dfs = func(mask int) int { + if f[mask] != -1 { + return f[mask] + } + i := bits.OnesCount(uint(mask)) + 1 + if i > n { + return 1 + } + f[mask] = 0 + for j := 1; j <= n; j++ { + if mask>>j&1 == 0 && (i%j == 0 || j%i == 0) { + f[mask] += dfs(mask | 1<>(j-1)&1 == 1 && (i%j == 0 || j%i == 0) { + f[mask] += f[mask^(1<<(j-1))] + } + } + } + return f[(1< { + if (f[mask] !== -1) { + return f[mask]; + } + const i = bitCount(mask) + 1; + if (i > n) { + return 1; + } + f[mask] = 0; + for (let j = 1; j <= n; ++j) { + if (((mask >> j) & 1) === 0 && (i % j === 0 || j % i === 0)) { + f[mask] += dfs(mask | (1 << j)); + } + } + return f[mask]; + }; + return dfs(0); +} + +function bitCount(i: number): number { + i = i - ((i >>> 1) & 0x55555555); + i = (i & 0x33333333) + ((i >>> 2) & 0x33333333); + i = (i + (i >>> 4)) & 0x0f0f0f0f; + i = i + (i >>> 8); + i = i + (i >>> 16); + return i & 0x3f; +} +``` + +```ts +function selfDivisiblePermutationCount(n: number): number { + const f: number[] = Array(1 << n).fill(0); + f[0] = 1; + for (let mask = 0; mask < 1 << n; ++mask) { + const i = bitCount(mask); + for (let j = 1; j <= n; ++j) { + if ((mask >> (j - 1)) & 1 && (i % j === 0 || j % i === 0)) { + f[mask] += f[mask ^ (1 << (j - 1))]; + } + } + } + return f.at(-1)!; +} + +function bitCount(i: number): number { + i = i - ((i >>> 1) & 0x55555555); + i = (i & 0x33333333) + ((i >>> 2) & 0x33333333); + i = (i + (i >>> 4)) & 0x0f0f0f0f; + i = i + (i >>> 8); + i = i + (i >>> 16); + return i & 0x3f; +} +``` + +### **...** + +``` + +``` + + diff --git a/solution/2900-2999/2992.Number of Self-Divisible Permutations/Solution.cpp b/solution/2900-2999/2992.Number of Self-Divisible Permutations/Solution.cpp new file mode 100644 index 0000000000000..f31e25d832287 --- /dev/null +++ b/solution/2900-2999/2992.Number of Self-Divisible Permutations/Solution.cpp @@ -0,0 +1,24 @@ +class Solution { +public: + int selfDivisiblePermutationCount(int n) { + int f[1 << (n + 1)]; + memset(f, -1, sizeof(f)); + function dfs = [&](int mask) { + if (f[mask] != -1) { + return f[mask]; + } + int i = __builtin_popcount(mask) + 1; + if (i > n) { + return 1; + } + f[mask] = 0; + for (int j = 1; j <= n; ++j) { + if ((mask >> j & 1) == 0 && (i % j == 0 || j % i == 0)) { + f[mask] += dfs(mask | 1 << j); + } + } + return f[mask]; + }; + return dfs(0); + } +}; \ No newline at end of file diff --git a/solution/2900-2999/2992.Number of Self-Divisible Permutations/Solution.go b/solution/2900-2999/2992.Number of Self-Divisible Permutations/Solution.go new file mode 100644 index 0000000000000..44cef2f1ee413 --- /dev/null +++ b/solution/2900-2999/2992.Number of Self-Divisible Permutations/Solution.go @@ -0,0 +1,24 @@ +func selfDivisiblePermutationCount(n int) int { + f := make([]int, 1<<(n+1)) + for i := range f { + f[i] = -1 + } + var dfs func(int) int + dfs = func(mask int) int { + if f[mask] != -1 { + return f[mask] + } + i := bits.OnesCount(uint(mask)) + 1 + if i > n { + return 1 + } + f[mask] = 0 + for j := 1; j <= n; j++ { + if mask>>j&1 == 0 && (i%j == 0 || j%i == 0) { + f[mask] += dfs(mask | 1< n) { + return 1; + } + f[mask] = 0; + for (int j = 1; j <= n; ++j) { + if ((mask >> j & 1) == 0 && (i % j == 0 || j % i == 0)) { + f[mask] += dfs(mask | 1 << j); + } + } + return f[mask]; + } +} \ No newline at end of file diff --git a/solution/2900-2999/2992.Number of Self-Divisible Permutations/Solution.py b/solution/2900-2999/2992.Number of Self-Divisible Permutations/Solution.py new file mode 100644 index 0000000000000..87d935310af7a --- /dev/null +++ b/solution/2900-2999/2992.Number of Self-Divisible Permutations/Solution.py @@ -0,0 +1,14 @@ +class Solution: + def selfDivisiblePermutationCount(self, n: int) -> int: + @cache + def dfs(mask: int) -> int: + i = mask.bit_count() + 1 + if i > n: + return 1 + ans = 0 + for j in range(1, n + 1): + if (mask >> j & 1) == 0 and (i % j == 0 or j % i == 0): + ans += dfs(mask | 1 << j) + return ans + + return dfs(0) diff --git a/solution/2900-2999/2992.Number of Self-Divisible Permutations/Solution.ts b/solution/2900-2999/2992.Number of Self-Divisible Permutations/Solution.ts new file mode 100644 index 0000000000000..dfb8e2280e083 --- /dev/null +++ b/solution/2900-2999/2992.Number of Self-Divisible Permutations/Solution.ts @@ -0,0 +1,29 @@ +function selfDivisiblePermutationCount(n: number): number { + const f: number[] = Array(1 << (n + 1)).fill(-1); + const dfs = (mask: number): number => { + if (f[mask] !== -1) { + return f[mask]; + } + const i = bitCount(mask) + 1; + if (i > n) { + return 1; + } + f[mask] = 0; + for (let j = 1; j <= n; ++j) { + if (((mask >> j) & 1) === 0 && (i % j === 0 || j % i === 0)) { + f[mask] += dfs(mask | (1 << j)); + } + } + return f[mask]; + }; + return dfs(0); +} + +function bitCount(i: number): number { + i = i - ((i >>> 1) & 0x55555555); + i = (i & 0x33333333) + ((i >>> 2) & 0x33333333); + i = (i + (i >>> 4)) & 0x0f0f0f0f; + i = i + (i >>> 8); + i = i + (i >>> 16); + return i & 0x3f; +} diff --git a/solution/DATABASE_README.md b/solution/DATABASE_README.md index 698c8e029750f..5f7c802c2c8ad 100644 --- a/solution/DATABASE_README.md +++ b/solution/DATABASE_README.md @@ -247,15 +247,15 @@ | 2854 | [滚动平均步数](/solution/2800-2899/2854.Rolling%20Average%20Steps/README.md) | `数据库` | 中等 | 🔒 | | 2893 | [计算每个区间内的订单](/solution/2800-2899/2893.Calculate%20Orders%20Within%20Each%20Interval/README.md) | `数据库` | 中等 | 🔒 | | 2922 | [市场分析 III](/solution/2900-2999/2922.Market%20Analysis%20III/README.md) | `数据库` | 中等 | 🔒 | -| 2978 | [Symmetric Coordinates](/solution/2900-2999/2978.Symmetric%20Coordinates/README.md) | | 中等 | 🔒 | -| 2984 | [Find Peak Calling Hours for Each City](/solution/2900-2999/2984.Find%20Peak%20Calling%20Hours%20for%20Each%20City/README.md) | | 中等 | 🔒 | -| 2985 | [Calculate Compressed Mean](/solution/2900-2999/2985.Calculate%20Compressed%20Mean/README.md) | | 简单 | 🔒 | -| 2986 | [Find Third Transaction](/solution/2900-2999/2986.Find%20Third%20Transaction/README.md) | | 中等 | 🔒 | -| 2987 | [Find Expensive Cities](/solution/2900-2999/2987.Find%20Expensive%20Cities/README.md) | | 简单 | 🔒 | -| 2988 | [Manager of the Largest Department](/solution/2900-2999/2988.Manager%20of%20the%20Largest%20Department/README.md) | | 中等 | 🔒 | -| 2989 | [班级表现](/solution/2900-2999/2989.Class%20Performance/README.md) | | 中等 | 🔒 | -| 2990 | [贷款类型](/solution/2900-2999/2990.Loan%20Types/README.md) | | 简单 | 🔒 | -| 2991 | [最好的三家酒庄](/solution/2900-2999/2991.Top%20Three%20Wineries/README.md) | | 困难 | 🔒 | +| 2978 | [Symmetric Coordinates](/solution/2900-2999/2978.Symmetric%20Coordinates/README.md) | `数据库` | 中等 | 🔒 | +| 2984 | [找到每座城市的高峰通话时间](/solution/2900-2999/2984.Find%20Peak%20Calling%20Hours%20for%20Each%20City/README.md) | `数据库` | 中等 | 🔒 | +| 2985 | [计算订单平均商品数量](/solution/2900-2999/2985.Calculate%20Compressed%20Mean/README.md) | `数据库` | 简单 | 🔒 | +| 2986 | [找到第三笔交易](/solution/2900-2999/2986.Find%20Third%20Transaction/README.md) | `数据库` | 中等 | 🔒 | +| 2987 | [寻找房价最贵的城市](/solution/2900-2999/2987.Find%20Expensive%20Cities/README.md) | `数据库` | 简单 | 🔒 | +| 2988 | [最大部门的经理](/solution/2900-2999/2988.Manager%20of%20the%20Largest%20Department/README.md) | `数据库` | 中等 | 🔒 | +| 2989 | [班级表现](/solution/2900-2999/2989.Class%20Performance/README.md) | `数据库` | 中等 | 🔒 | +| 2990 | [贷款类型](/solution/2900-2999/2990.Loan%20Types/README.md) | `数据库` | 简单 | 🔒 | +| 2991 | [最好的三家酒庄](/solution/2900-2999/2991.Top%20Three%20Wineries/README.md) | `数据库` | 困难 | 🔒 | ## 版权 diff --git a/solution/DATABASE_README_EN.md b/solution/DATABASE_README_EN.md index 4e3b670d5d4ad..c04f0c4ff2378 100644 --- a/solution/DATABASE_README_EN.md +++ b/solution/DATABASE_README_EN.md @@ -245,15 +245,15 @@ Press Control + F(or Command + F on | 2854 | [Rolling Average Steps](/solution/2800-2899/2854.Rolling%20Average%20Steps/README_EN.md) | `Database` | Medium | 🔒 | | 2893 | [Calculate Orders Within Each Interval](/solution/2800-2899/2893.Calculate%20Orders%20Within%20Each%20Interval/README_EN.md) | `Database` | Medium | 🔒 | | 2922 | [Market Analysis III](/solution/2900-2999/2922.Market%20Analysis%20III/README_EN.md) | `Database` | Medium | 🔒 | -| 2978 | [Symmetric Coordinates](/solution/2900-2999/2978.Symmetric%20Coordinates/README_EN.md) | | Medium | 🔒 | -| 2984 | [Find Peak Calling Hours for Each City](/solution/2900-2999/2984.Find%20Peak%20Calling%20Hours%20for%20Each%20City/README_EN.md) | | Medium | 🔒 | -| 2985 | [Calculate Compressed Mean](/solution/2900-2999/2985.Calculate%20Compressed%20Mean/README_EN.md) | | Easy | 🔒 | -| 2986 | [Find Third Transaction](/solution/2900-2999/2986.Find%20Third%20Transaction/README_EN.md) | | Medium | 🔒 | -| 2987 | [Find Expensive Cities](/solution/2900-2999/2987.Find%20Expensive%20Cities/README_EN.md) | | Easy | 🔒 | -| 2988 | [Manager of the Largest Department](/solution/2900-2999/2988.Manager%20of%20the%20Largest%20Department/README_EN.md) | | Medium | 🔒 | -| 2989 | [Class Performance](/solution/2900-2999/2989.Class%20Performance/README_EN.md) | | Medium | 🔒 | -| 2990 | [Loan Types](/solution/2900-2999/2990.Loan%20Types/README_EN.md) | | Easy | 🔒 | -| 2991 | [Top Three Wineries](/solution/2900-2999/2991.Top%20Three%20Wineries/README_EN.md) | | Hard | 🔒 | +| 2978 | [Symmetric Coordinates](/solution/2900-2999/2978.Symmetric%20Coordinates/README_EN.md) | `Database` | Medium | 🔒 | +| 2984 | [Find Peak Calling Hours for Each City](/solution/2900-2999/2984.Find%20Peak%20Calling%20Hours%20for%20Each%20City/README_EN.md) | `Database` | Medium | 🔒 | +| 2985 | [Calculate Compressed Mean](/solution/2900-2999/2985.Calculate%20Compressed%20Mean/README_EN.md) | `Database` | Easy | 🔒 | +| 2986 | [Find Third Transaction](/solution/2900-2999/2986.Find%20Third%20Transaction/README_EN.md) | `Database` | Medium | 🔒 | +| 2987 | [Find Expensive Cities](/solution/2900-2999/2987.Find%20Expensive%20Cities/README_EN.md) | `Database` | Easy | 🔒 | +| 2988 | [Manager of the Largest Department](/solution/2900-2999/2988.Manager%20of%20the%20Largest%20Department/README_EN.md) | `Database` | Medium | 🔒 | +| 2989 | [Class Performance](/solution/2900-2999/2989.Class%20Performance/README_EN.md) | `Database` | Medium | 🔒 | +| 2990 | [Loan Types](/solution/2900-2999/2990.Loan%20Types/README_EN.md) | `Database` | Easy | 🔒 | +| 2991 | [Top Three Wineries](/solution/2900-2999/2991.Top%20Three%20Wineries/README_EN.md) | `Database` | Hard | 🔒 | ## Copyright diff --git a/solution/README.md b/solution/README.md index 4c47b82587da1..2a7be74c805d2 100644 --- a/solution/README.md +++ b/solution/README.md @@ -2979,29 +2979,30 @@ | 2966 | [划分数组并满足最大差限制](/solution/2900-2999/2966.Divide%20Array%20Into%20Arrays%20With%20Max%20Difference/README.md) | | 中等 | 第 376 场周赛 | | 2967 | [使数组成为等数数组的最小代价](/solution/2900-2999/2967.Minimum%20Cost%20to%20Make%20Array%20Equalindromic/README.md) | `贪心`,`数组`,`数学`,`排序` | 中等 | 第 376 场周赛 | | 2968 | [执行操作使频率分数最大](/solution/2900-2999/2968.Apply%20Operations%20to%20Maximize%20Frequency%20Score/README.md) | `数组`,`二分查找`,`前缀和`,`排序`,`滑动窗口` | 困难 | 第 376 场周赛 | -| 2969 | [购买水果需要的最少金币数 II](/solution/2900-2999/2969.Minimum%20Number%20of%20Coins%20for%20Fruits%20II/README.md) | `队列`,`数组`,`动态规划`,`单调队列` | 困难 | 🔒 | -| 2970 | [统计移除递增子数组的数目 I](/solution/2900-2999/2970.Count%20the%20Number%20of%20Incremovable%20Subarrays%20I/README.md) | | 简单 | 第 120 场双周赛 | -| 2971 | [找到最大周长的多边形](/solution/2900-2999/2971.Find%20Polygon%20With%20the%20Largest%20Perimeter/README.md) | | 中等 | 第 120 场双周赛 | -| 2972 | [统计移除递增子数组的数目 II](/solution/2900-2999/2972.Count%20the%20Number%20of%20Incremovable%20Subarrays%20II/README.md) | | 困难 | 第 120 场双周赛 | -| 2973 | [树中每个节点放置的金币数目](/solution/2900-2999/2973.Find%20Number%20of%20Coins%20to%20Place%20in%20Tree%20Nodes/README.md) | | 困难 | 第 120 场双周赛 | -| 2974 | [最小数字游戏](/solution/2900-2999/2974.Minimum%20Number%20Game/README.md) | | 简单 | 第 377 场周赛 | -| 2975 | [移除栅栏得到的正方形田地的最大面积](/solution/2900-2999/2975.Maximum%20Square%20Area%20by%20Removing%20Fences%20From%20a%20Field/README.md) | | 中等 | 第 377 场周赛 | -| 2976 | [转换字符串的最小成本 I](/solution/2900-2999/2976.Minimum%20Cost%20to%20Convert%20String%20I/README.md) | | 中等 | 第 377 场周赛 | -| 2977 | [转换字符串的最小成本 II](/solution/2900-2999/2977.Minimum%20Cost%20to%20Convert%20String%20II/README.md) | | 困难 | 第 377 场周赛 | -| 2978 | [Symmetric Coordinates](/solution/2900-2999/2978.Symmetric%20Coordinates/README.md) | | 中等 | 🔒 | -| 2979 | [最贵的无法购买的商品](/solution/2900-2999/2979.Most%20Expensive%20Item%20That%20Can%20Not%20Be%20Bought/README.md) | | 中等 | 🔒 | -| 2980 | [检查按位或是否存在尾随零](/solution/2900-2999/2980.Check%20if%20Bitwise%20OR%20Has%20Trailing%20Zeros/README.md) | | 简单 | 第 378 场周赛 | -| 2981 | [找出出现至少三次的最长特殊子字符串 I](/solution/2900-2999/2981.Find%20Longest%20Special%20Substring%20That%20Occurs%20Thrice%20I/README.md) | | 中等 | 第 378 场周赛 | -| 2982 | [找出出现至少三次的最长特殊子字符串 II](/solution/2900-2999/2982.Find%20Longest%20Special%20Substring%20That%20Occurs%20Thrice%20II/README.md) | | 中等 | 第 378 场周赛 | -| 2983 | [回文串重新排列查询](/solution/2900-2999/2983.Palindrome%20Rearrangement%20Queries/README.md) | | 困难 | 第 378 场周赛 | -| 2984 | [Find Peak Calling Hours for Each City](/solution/2900-2999/2984.Find%20Peak%20Calling%20Hours%20for%20Each%20City/README.md) | | 中等 | 🔒 | -| 2985 | [Calculate Compressed Mean](/solution/2900-2999/2985.Calculate%20Compressed%20Mean/README.md) | | 简单 | 🔒 | -| 2986 | [Find Third Transaction](/solution/2900-2999/2986.Find%20Third%20Transaction/README.md) | | 中等 | 🔒 | -| 2987 | [Find Expensive Cities](/solution/2900-2999/2987.Find%20Expensive%20Cities/README.md) | | 简单 | 🔒 | -| 2988 | [Manager of the Largest Department](/solution/2900-2999/2988.Manager%20of%20the%20Largest%20Department/README.md) | | 中等 | 🔒 | -| 2989 | [班级表现](/solution/2900-2999/2989.Class%20Performance/README.md) | | 中等 | 🔒 | -| 2990 | [贷款类型](/solution/2900-2999/2990.Loan%20Types/README.md) | | 简单 | 🔒 | -| 2991 | [最好的三家酒庄](/solution/2900-2999/2991.Top%20Three%20Wineries/README.md) | | 困难 | 🔒 | +| 2969 | [购买水果需要的最少金币数 II](/solution/2900-2999/2969.Minimum%20Number%20of%20Coins%20for%20Fruits%20II/README.md) | `队列`,`数组`,`动态规划`,`单调队列`,`堆(优先队列)` | 困难 | 🔒 | +| 2970 | [统计移除递增子数组的数目 I](/solution/2900-2999/2970.Count%20the%20Number%20of%20Incremovable%20Subarrays%20I/README.md) | `数组`,`双指针`,`二分查找`,`枚举` | 简单 | 第 120 场双周赛 | +| 2971 | [找到最大周长的多边形](/solution/2900-2999/2971.Find%20Polygon%20With%20the%20Largest%20Perimeter/README.md) | `贪心`,`数组`,`前缀和`,`排序` | 中等 | 第 120 场双周赛 | +| 2972 | [统计移除递增子数组的数目 II](/solution/2900-2999/2972.Count%20the%20Number%20of%20Incremovable%20Subarrays%20II/README.md) | `数组`,`双指针`,`二分查找` | 困难 | 第 120 场双周赛 | +| 2973 | [树中每个节点放置的金币数目](/solution/2900-2999/2973.Find%20Number%20of%20Coins%20to%20Place%20in%20Tree%20Nodes/README.md) | `树`,`深度优先搜索`,`动态规划`,`排序`,`堆(优先队列)` | 困难 | 第 120 场双周赛 | +| 2974 | [最小数字游戏](/solution/2900-2999/2974.Minimum%20Number%20Game/README.md) | `排序`,`数组`,`模拟`,`堆(优先队列)` | 简单 | 第 377 场周赛 | +| 2975 | [移除栅栏得到的正方形田地的最大面积](/solution/2900-2999/2975.Maximum%20Square%20Area%20by%20Removing%20Fences%20From%20a%20Field/README.md) | `数组`,`哈希表`,`枚举` | 中等 | 第 377 场周赛 | +| 2976 | [转换字符串的最小成本 I](/solution/2900-2999/2976.Minimum%20Cost%20to%20Convert%20String%20I/README.md) | `图`,`数组`,`字符串`,`最短路` | 中等 | 第 377 场周赛 | +| 2977 | [转换字符串的最小成本 II](/solution/2900-2999/2977.Minimum%20Cost%20to%20Convert%20String%20II/README.md) | `图`,`字典树`,`数组`,`字符串`,`动态规划`,`最短路` | 困难 | 第 377 场周赛 | +| 2978 | [Symmetric Coordinates](/solution/2900-2999/2978.Symmetric%20Coordinates/README.md) | `数据库` | 中等 | 🔒 | +| 2979 | [最贵的无法购买的商品](/solution/2900-2999/2979.Most%20Expensive%20Item%20That%20Can%20Not%20Be%20Bought/README.md) | `数学`,`动态规划`,`数论` | 中等 | 🔒 | +| 2980 | [检查按位或是否存在尾随零](/solution/2900-2999/2980.Check%20if%20Bitwise%20OR%20Has%20Trailing%20Zeros/README.md) | `位运算`,`数组` | 简单 | 第 378 场周赛 | +| 2981 | [找出出现至少三次的最长特殊子字符串 I](/solution/2900-2999/2981.Find%20Longest%20Special%20Substring%20That%20Occurs%20Thrice%20I/README.md) | `哈希表`,`字符串`,`二分查找`,`计数`,`滑动窗口` | 中等 | 第 378 场周赛 | +| 2982 | [找出出现至少三次的最长特殊子字符串 II](/solution/2900-2999/2982.Find%20Longest%20Special%20Substring%20That%20Occurs%20Thrice%20II/README.md) | `哈希表`,`字符串`,`二分查找`,`计数`,`滑动窗口` | 中等 | 第 378 场周赛 | +| 2983 | [回文串重新排列查询](/solution/2900-2999/2983.Palindrome%20Rearrangement%20Queries/README.md) | `哈希表`,`字符串`,`前缀和` | 困难 | 第 378 场周赛 | +| 2984 | [找到每座城市的高峰通话时间](/solution/2900-2999/2984.Find%20Peak%20Calling%20Hours%20for%20Each%20City/README.md) | `数据库` | 中等 | 🔒 | +| 2985 | [计算订单平均商品数量](/solution/2900-2999/2985.Calculate%20Compressed%20Mean/README.md) | `数据库` | 简单 | 🔒 | +| 2986 | [找到第三笔交易](/solution/2900-2999/2986.Find%20Third%20Transaction/README.md) | `数据库` | 中等 | 🔒 | +| 2987 | [寻找房价最贵的城市](/solution/2900-2999/2987.Find%20Expensive%20Cities/README.md) | `数据库` | 简单 | 🔒 | +| 2988 | [最大部门的经理](/solution/2900-2999/2988.Manager%20of%20the%20Largest%20Department/README.md) | `数据库` | 中等 | 🔒 | +| 2989 | [班级表现](/solution/2900-2999/2989.Class%20Performance/README.md) | `数据库` | 中等 | 🔒 | +| 2990 | [贷款类型](/solution/2900-2999/2990.Loan%20Types/README.md) | `数据库` | 简单 | 🔒 | +| 2991 | [最好的三家酒庄](/solution/2900-2999/2991.Top%20Three%20Wineries/README.md) | `数据库` | 困难 | 🔒 | +| 2992 | [Number of Self-Divisible Permutations](/solution/2900-2999/2992.Number%20of%20Self-Divisible%20Permutations/README.md) | | 中等 | 🔒 | ## 版权 diff --git a/solution/README_EN.md b/solution/README_EN.md index 928468029f77b..3b90a6bdf9e65 100644 --- a/solution/README_EN.md +++ b/solution/README_EN.md @@ -2977,29 +2977,30 @@ Press Control + F(or Command + F on | 2966 | [Divide Array Into Arrays With Max Difference](/solution/2900-2999/2966.Divide%20Array%20Into%20Arrays%20With%20Max%20Difference/README_EN.md) | | Medium | Weekly Contest 376 | | 2967 | [Minimum Cost to Make Array Equalindromic](/solution/2900-2999/2967.Minimum%20Cost%20to%20Make%20Array%20Equalindromic/README_EN.md) | `Greedy`,`Array`,`Math`,`Sorting` | Medium | Weekly Contest 376 | | 2968 | [Apply Operations to Maximize Frequency Score](/solution/2900-2999/2968.Apply%20Operations%20to%20Maximize%20Frequency%20Score/README_EN.md) | `Array`,`Binary Search`,`Prefix Sum`,`Sorting`,`Sliding Window` | Hard | Weekly Contest 376 | -| 2969 | [Minimum Number of Coins for Fruits II](/solution/2900-2999/2969.Minimum%20Number%20of%20Coins%20for%20Fruits%20II/README_EN.md) | `Queue`,`Array`,`Dynamic Programming`,`Monotonic Queue` | Hard | 🔒 | -| 2970 | [Count the Number of Incremovable Subarrays I](/solution/2900-2999/2970.Count%20the%20Number%20of%20Incremovable%20Subarrays%20I/README_EN.md) | | Easy | Biweekly Contest 120 | -| 2971 | [Find Polygon With the Largest Perimeter](/solution/2900-2999/2971.Find%20Polygon%20With%20the%20Largest%20Perimeter/README_EN.md) | | Medium | Biweekly Contest 120 | -| 2972 | [Count the Number of Incremovable Subarrays II](/solution/2900-2999/2972.Count%20the%20Number%20of%20Incremovable%20Subarrays%20II/README_EN.md) | | Hard | Biweekly Contest 120 | -| 2973 | [Find Number of Coins to Place in Tree Nodes](/solution/2900-2999/2973.Find%20Number%20of%20Coins%20to%20Place%20in%20Tree%20Nodes/README_EN.md) | | Hard | Biweekly Contest 120 | -| 2974 | [Minimum Number Game](/solution/2900-2999/2974.Minimum%20Number%20Game/README_EN.md) | | Easy | Weekly Contest 377 | -| 2975 | [Maximum Square Area by Removing Fences From a Field](/solution/2900-2999/2975.Maximum%20Square%20Area%20by%20Removing%20Fences%20From%20a%20Field/README_EN.md) | | Medium | Weekly Contest 377 | -| 2976 | [Minimum Cost to Convert String I](/solution/2900-2999/2976.Minimum%20Cost%20to%20Convert%20String%20I/README_EN.md) | | Medium | Weekly Contest 377 | -| 2977 | [Minimum Cost to Convert String II](/solution/2900-2999/2977.Minimum%20Cost%20to%20Convert%20String%20II/README_EN.md) | | Hard | Weekly Contest 377 | -| 2978 | [Symmetric Coordinates](/solution/2900-2999/2978.Symmetric%20Coordinates/README_EN.md) | | Medium | 🔒 | -| 2979 | [Most Expensive Item That Can Not Be Bought](/solution/2900-2999/2979.Most%20Expensive%20Item%20That%20Can%20Not%20Be%20Bought/README_EN.md) | | Medium | 🔒 | -| 2980 | [Check if Bitwise OR Has Trailing Zeros](/solution/2900-2999/2980.Check%20if%20Bitwise%20OR%20Has%20Trailing%20Zeros/README_EN.md) | | Easy | Weekly Contest 378 | -| 2981 | [Find Longest Special Substring That Occurs Thrice I](/solution/2900-2999/2981.Find%20Longest%20Special%20Substring%20That%20Occurs%20Thrice%20I/README_EN.md) | | Medium | Weekly Contest 378 | -| 2982 | [Find Longest Special Substring That Occurs Thrice II](/solution/2900-2999/2982.Find%20Longest%20Special%20Substring%20That%20Occurs%20Thrice%20II/README_EN.md) | | Medium | Weekly Contest 378 | -| 2983 | [Palindrome Rearrangement Queries](/solution/2900-2999/2983.Palindrome%20Rearrangement%20Queries/README_EN.md) | | Hard | Weekly Contest 378 | -| 2984 | [Find Peak Calling Hours for Each City](/solution/2900-2999/2984.Find%20Peak%20Calling%20Hours%20for%20Each%20City/README_EN.md) | | Medium | 🔒 | -| 2985 | [Calculate Compressed Mean](/solution/2900-2999/2985.Calculate%20Compressed%20Mean/README_EN.md) | | Easy | 🔒 | -| 2986 | [Find Third Transaction](/solution/2900-2999/2986.Find%20Third%20Transaction/README_EN.md) | | Medium | 🔒 | -| 2987 | [Find Expensive Cities](/solution/2900-2999/2987.Find%20Expensive%20Cities/README_EN.md) | | Easy | 🔒 | -| 2988 | [Manager of the Largest Department](/solution/2900-2999/2988.Manager%20of%20the%20Largest%20Department/README_EN.md) | | Medium | 🔒 | -| 2989 | [Class Performance](/solution/2900-2999/2989.Class%20Performance/README_EN.md) | | Medium | 🔒 | -| 2990 | [Loan Types](/solution/2900-2999/2990.Loan%20Types/README_EN.md) | | Easy | 🔒 | -| 2991 | [Top Three Wineries](/solution/2900-2999/2991.Top%20Three%20Wineries/README_EN.md) | | Hard | 🔒 | +| 2969 | [Minimum Number of Coins for Fruits II](/solution/2900-2999/2969.Minimum%20Number%20of%20Coins%20for%20Fruits%20II/README_EN.md) | `Queue`,`Array`,`Dynamic Programming`,`Monotonic Queue`,`Heap (Priority Queue)` | Hard | 🔒 | +| 2970 | [Count the Number of Incremovable Subarrays I](/solution/2900-2999/2970.Count%20the%20Number%20of%20Incremovable%20Subarrays%20I/README_EN.md) | `Array`,`Two Pointers`,`Binary Search`,`Enumeration` | Easy | Biweekly Contest 120 | +| 2971 | [Find Polygon With the Largest Perimeter](/solution/2900-2999/2971.Find%20Polygon%20With%20the%20Largest%20Perimeter/README_EN.md) | `Greedy`,`Array`,`Prefix Sum`,`Sorting` | Medium | Biweekly Contest 120 | +| 2972 | [Count the Number of Incremovable Subarrays II](/solution/2900-2999/2972.Count%20the%20Number%20of%20Incremovable%20Subarrays%20II/README_EN.md) | `Array`,`Two Pointers`,`Binary Search` | Hard | Biweekly Contest 120 | +| 2973 | [Find Number of Coins to Place in Tree Nodes](/solution/2900-2999/2973.Find%20Number%20of%20Coins%20to%20Place%20in%20Tree%20Nodes/README_EN.md) | `Tree`,`Depth-First Search`,`Dynamic Programming`,`Sorting`,`Heap (Priority Queue)` | Hard | Biweekly Contest 120 | +| 2974 | [Minimum Number Game](/solution/2900-2999/2974.Minimum%20Number%20Game/README_EN.md) | `Sort`,`Array`,`Simulation`,`Heap (Priority Queue)` | Easy | Weekly Contest 377 | +| 2975 | [Maximum Square Area by Removing Fences From a Field](/solution/2900-2999/2975.Maximum%20Square%20Area%20by%20Removing%20Fences%20From%20a%20Field/README_EN.md) | `Array`,`Hash Table`,`Enumeration` | Medium | Weekly Contest 377 | +| 2976 | [Minimum Cost to Convert String I](/solution/2900-2999/2976.Minimum%20Cost%20to%20Convert%20String%20I/README_EN.md) | `Graph`,`Array`,`String`,`Shortest Path` | Medium | Weekly Contest 377 | +| 2977 | [Minimum Cost to Convert String II](/solution/2900-2999/2977.Minimum%20Cost%20to%20Convert%20String%20II/README_EN.md) | `Graph`,`Trie`,`Array`,`String`,`Dynamic Programming`,`Shortest Path` | Hard | Weekly Contest 377 | +| 2978 | [Symmetric Coordinates](/solution/2900-2999/2978.Symmetric%20Coordinates/README_EN.md) | `Database` | Medium | 🔒 | +| 2979 | [Most Expensive Item That Can Not Be Bought](/solution/2900-2999/2979.Most%20Expensive%20Item%20That%20Can%20Not%20Be%20Bought/README_EN.md) | `Math`,`Dynamic Programming`,`Number Theory` | Medium | 🔒 | +| 2980 | [Check if Bitwise OR Has Trailing Zeros](/solution/2900-2999/2980.Check%20if%20Bitwise%20OR%20Has%20Trailing%20Zeros/README_EN.md) | `Bit Manipulation`,`Array` | Easy | Weekly Contest 378 | +| 2981 | [Find Longest Special Substring That Occurs Thrice I](/solution/2900-2999/2981.Find%20Longest%20Special%20Substring%20That%20Occurs%20Thrice%20I/README_EN.md) | `Hash Table`,`String`,`Binary Search`,`Counting`,`Sliding Window` | Medium | Weekly Contest 378 | +| 2982 | [Find Longest Special Substring That Occurs Thrice II](/solution/2900-2999/2982.Find%20Longest%20Special%20Substring%20That%20Occurs%20Thrice%20II/README_EN.md) | `Hash Table`,`String`,`Binary Search`,`Counting`,`Sliding Window` | Medium | Weekly Contest 378 | +| 2983 | [Palindrome Rearrangement Queries](/solution/2900-2999/2983.Palindrome%20Rearrangement%20Queries/README_EN.md) | `Hash Table`,`String`,`Prefix Sum` | Hard | Weekly Contest 378 | +| 2984 | [Find Peak Calling Hours for Each City](/solution/2900-2999/2984.Find%20Peak%20Calling%20Hours%20for%20Each%20City/README_EN.md) | `Database` | Medium | 🔒 | +| 2985 | [Calculate Compressed Mean](/solution/2900-2999/2985.Calculate%20Compressed%20Mean/README_EN.md) | `Database` | Easy | 🔒 | +| 2986 | [Find Third Transaction](/solution/2900-2999/2986.Find%20Third%20Transaction/README_EN.md) | `Database` | Medium | 🔒 | +| 2987 | [Find Expensive Cities](/solution/2900-2999/2987.Find%20Expensive%20Cities/README_EN.md) | `Database` | Easy | 🔒 | +| 2988 | [Manager of the Largest Department](/solution/2900-2999/2988.Manager%20of%20the%20Largest%20Department/README_EN.md) | `Database` | Medium | 🔒 | +| 2989 | [Class Performance](/solution/2900-2999/2989.Class%20Performance/README_EN.md) | `Database` | Medium | 🔒 | +| 2990 | [Loan Types](/solution/2900-2999/2990.Loan%20Types/README_EN.md) | `Database` | Easy | 🔒 | +| 2991 | [Top Three Wineries](/solution/2900-2999/2991.Top%20Three%20Wineries/README_EN.md) | `Database` | Hard | 🔒 | +| 2992 | [Number of Self-Divisible Permutations](/solution/2900-2999/2992.Number%20of%20Self-Divisible%20Permutations/README_EN.md) | | Medium | 🔒 | ## Copyright diff --git a/solution/database-summary.md b/solution/database-summary.md index ab1f1a0734e2b..3a400860c3939 100644 --- a/solution/database-summary.md +++ b/solution/database-summary.md @@ -238,11 +238,11 @@ - [2893.计算每个区间内的订单](/database-solution/2800-2899/2893.Calculate%20Orders%20Within%20Each%20Interval/README.md) - [2922.市场分析 III](/database-solution/2900-2999/2922.Market%20Analysis%20III/README.md) - [2978.Symmetric Coordinates](/database-solution/2900-2999/2978.Symmetric%20Coordinates/README.md) - - [2984.Find Peak Calling Hours for Each City](/database-solution/2900-2999/2984.Find%20Peak%20Calling%20Hours%20for%20Each%20City/README.md) - - [2985.Calculate Compressed Mean](/database-solution/2900-2999/2985.Calculate%20Compressed%20Mean/README.md) - - [2986.Find Third Transaction](/database-solution/2900-2999/2986.Find%20Third%20Transaction/README.md) - - [2987.Find Expensive Cities](/database-solution/2900-2999/2987.Find%20Expensive%20Cities/README.md) - - [2988.Manager of the Largest Department](/database-solution/2900-2999/2988.Manager%20of%20the%20Largest%20Department/README.md) + - [2984.找到每座城市的高峰通话时间](/database-solution/2900-2999/2984.Find%20Peak%20Calling%20Hours%20for%20Each%20City/README.md) + - [2985.计算订单平均商品数量](/database-solution/2900-2999/2985.Calculate%20Compressed%20Mean/README.md) + - [2986.找到第三笔交易](/database-solution/2900-2999/2986.Find%20Third%20Transaction/README.md) + - [2987.寻找房价最贵的城市](/database-solution/2900-2999/2987.Find%20Expensive%20Cities/README.md) + - [2988.最大部门的经理](/database-solution/2900-2999/2988.Manager%20of%20the%20Largest%20Department/README.md) - [2989.班级表现](/database-solution/2900-2999/2989.Class%20Performance/README.md) - [2990.贷款类型](/database-solution/2900-2999/2990.Loan%20Types/README.md) - [2991.最好的三家酒庄](/database-solution/2900-2999/2991.Top%20Three%20Wineries/README.md) diff --git a/solution/summary.md b/solution/summary.md index 4f31e3c8af5ed..1576dcda99727 100644 --- a/solution/summary.md +++ b/solution/summary.md @@ -3041,11 +3041,12 @@ - [2981.找出出现至少三次的最长特殊子字符串 I](/solution/2900-2999/2981.Find%20Longest%20Special%20Substring%20That%20Occurs%20Thrice%20I/README.md) - [2982.找出出现至少三次的最长特殊子字符串 II](/solution/2900-2999/2982.Find%20Longest%20Special%20Substring%20That%20Occurs%20Thrice%20II/README.md) - [2983.回文串重新排列查询](/solution/2900-2999/2983.Palindrome%20Rearrangement%20Queries/README.md) - - [2984.Find Peak Calling Hours for Each City](/solution/2900-2999/2984.Find%20Peak%20Calling%20Hours%20for%20Each%20City/README.md) - - [2985.Calculate Compressed Mean](/solution/2900-2999/2985.Calculate%20Compressed%20Mean/README.md) - - [2986.Find Third Transaction](/solution/2900-2999/2986.Find%20Third%20Transaction/README.md) - - [2987.Find Expensive Cities](/solution/2900-2999/2987.Find%20Expensive%20Cities/README.md) - - [2988.Manager of the Largest Department](/solution/2900-2999/2988.Manager%20of%20the%20Largest%20Department/README.md) + - [2984.找到每座城市的高峰通话时间](/solution/2900-2999/2984.Find%20Peak%20Calling%20Hours%20for%20Each%20City/README.md) + - [2985.计算订单平均商品数量](/solution/2900-2999/2985.Calculate%20Compressed%20Mean/README.md) + - [2986.找到第三笔交易](/solution/2900-2999/2986.Find%20Third%20Transaction/README.md) + - [2987.寻找房价最贵的城市](/solution/2900-2999/2987.Find%20Expensive%20Cities/README.md) + - [2988.最大部门的经理](/solution/2900-2999/2988.Manager%20of%20the%20Largest%20Department/README.md) - [2989.班级表现](/solution/2900-2999/2989.Class%20Performance/README.md) - [2990.贷款类型](/solution/2900-2999/2990.Loan%20Types/README.md) - [2991.最好的三家酒庄](/solution/2900-2999/2991.Top%20Three%20Wineries/README.md) + - [2992.Number of Self-Divisible Permutations](/solution/2900-2999/2992.Number%20of%20Self-Divisible%20Permutations/README.md) diff --git a/solution/summary_en.md b/solution/summary_en.md index d5924a8fc42c7..953d83ef6c6ba 100644 --- a/solution/summary_en.md +++ b/solution/summary_en.md @@ -3049,3 +3049,4 @@ - [2989.Class Performance](/solution/2900-2999/2989.Class%20Performance/README_EN.md) - [2990.Loan Types](/solution/2900-2999/2990.Loan%20Types/README_EN.md) - [2991.Top Three Wineries](/solution/2900-2999/2991.Top%20Three%20Wineries/README_EN.md) + - [2992.Number of Self-Divisible Permutations](/solution/2900-2999/2992.Number%20of%20Self-Divisible%20Permutations/README_EN.md)