From 49a38f6a9df3aaff1456e6ec831450720453abd8 Mon Sep 17 00:00:00 2001 From: yanglbme Date: Fri, 31 Dec 2021 19:10:17 +0800 Subject: [PATCH] feat: add solutions to lc problem: No.1208 No.1208.Get Equal Substrings Within Budget --- .../README.md | 130 +++++++++++++++++- .../README_EN.md | 128 ++++++++++++++++- .../Solution.cpp | 27 ++++ .../Solution.go | 36 +++++ .../Solution.java | 31 +++++ .../Solution.py | 24 ++++ .../README.md | 90 ++++++++++++ .../README_EN.md | 80 +++++++++++ .../images/image-20211223181501-1.png | Bin 0 -> 25153 bytes .../images/image-20211223181518-2.png | Bin 0 -> 15249 bytes .../images/image-20211223181817-3.png | Bin 0 -> 6726 bytes solution/README.md | 34 +++-- solution/README_EN.md | 28 ++-- solution/readme_template.md | 2 +- solution/summary.md | 1 + solution/summary_en.md | 1 + 16 files changed, 584 insertions(+), 28 deletions(-) create mode 100644 solution/1200-1299/1208.Get Equal Substrings Within Budget/Solution.cpp create mode 100644 solution/1200-1299/1208.Get Equal Substrings Within Budget/Solution.go create mode 100644 solution/1200-1299/1208.Get Equal Substrings Within Budget/Solution.java create mode 100644 solution/1200-1299/1208.Get Equal Substrings Within Budget/Solution.py create mode 100644 solution/2100-2199/2123.Minimum Operations to Remove Adjacent Ones in Matrix/README.md create mode 100644 solution/2100-2199/2123.Minimum Operations to Remove Adjacent Ones in Matrix/README_EN.md create mode 100644 solution/2100-2199/2123.Minimum Operations to Remove Adjacent Ones in Matrix/images/image-20211223181501-1.png create mode 100644 solution/2100-2199/2123.Minimum Operations to Remove Adjacent Ones in Matrix/images/image-20211223181518-2.png create mode 100644 solution/2100-2199/2123.Minimum Operations to Remove Adjacent Ones in Matrix/images/image-20211223181817-3.png diff --git a/solution/1200-1299/1208.Get Equal Substrings Within Budget/README.md b/solution/1200-1299/1208.Get Equal Substrings Within Budget/README.md index 553b9783becc0..e81b486f6a9a5 100644 --- a/solution/1200-1299/1208.Get Equal Substrings Within Budget/README.md +++ b/solution/1200-1299/1208.Get Equal Substrings Within Budget/README.md @@ -55,6 +55,8 @@ +前缀和 + 二分查找。 + ### **Python3** @@ -62,7 +64,30 @@ ```python - +class Solution: + def equalSubstring(self, s: str, t: str, maxCost: int) -> int: + n = len(s) + presum = [0] * (n + 1) + for i in range(n): + presum[i + 1] = presum[i] + abs(ord(s[i]) - ord(t[i])) + left, right = 0, n + + def check(l): + i = 0 + while i + l - 1 < n: + j = i + l - 1 + if presum[j + 1] - presum[i] <= maxCost: + return True + i += 1 + return False + + while left < right: + mid = (left + right + 1) >> 1 + if check(mid): + left = mid + else: + right = mid - 1 + return left ``` ### **Java** @@ -70,7 +95,110 @@ ```java +class Solution { + public int equalSubstring(String s, String t, int maxCost) { + int n = s.length(); + int[] presum = new int[n + 1]; + for (int i = 0; i < n; ++i) { + presum[i + 1] = presum[i] + Math.abs(s.charAt(i) - t.charAt(i)); + } + int left = 0, right = n; + while (left < right) { + int mid = (left + right + 1) >>> 1; + if (check(mid, presum, maxCost, n)) { + left = mid; + } else { + right = mid - 1; + } + } + return left; + } + + private boolean check(int l, int[] s, int maxCost, int n) { + int i = 0; + while (i + l - 1 < n) { + int j = i + l - 1; + if (s[j + 1] - s[i] <= maxCost) { + return true; + } + ++i; + } + return false; + } +} +``` + +### **C++** + +```cpp +class Solution { +public: + int equalSubstring(string s, string t, int maxCost) { + int n = s.size(); + vector presum(n + 1); + for (int i = 0; i < n; ++i) presum[i + 1] = presum[i] + abs(s[i] - t[i]); + int left = 0, right = n; + while (left < right) + { + int mid = left + right + 1 >> 1; + if (check(mid, presum, maxCost, n)) left = mid; + else right = mid - 1; + } + return left; + } + + bool check(int l, vector& s, int maxCost, int n) { + int i = 0; + while (i + l - 1 < n) + { + int j = i + l - 1; + if (s[j + 1] - s[i] <= maxCost) return true; + ++i; + } + return false; + } +}; +``` +### **Go** + +```go +func equalSubstring(s string, t string, maxCost int) int { + n := len(s) + presum := make([]int, n+1) + for i, c := range s { + presum[i+1] = presum[i] + abs(int(c)-int(t[i])) + } + + left, right := 0, n + check := func(l int) bool { + i := 0 + for i+l-1 < n { + j := i + l - 1 + if presum[j+1]-presum[i] <= maxCost { + return true + } + i++ + } + return false + } + for left < right { + mid := (left + right + 1) >> 1 + if check(mid) { + left = mid + } else { + right = mid - 1 + } + } + return left +} + +func abs(x int) int { + if x > 0 { + return x + } + return -x +} ``` ### **...** diff --git a/solution/1200-1299/1208.Get Equal Substrings Within Budget/README_EN.md b/solution/1200-1299/1208.Get Equal Substrings Within Budget/README_EN.md index fb5e3d036b980..d3acc548e7f32 100644 --- a/solution/1200-1299/1208.Get Equal Substrings Within Budget/README_EN.md +++ b/solution/1200-1299/1208.Get Equal Substrings Within Budget/README_EN.md @@ -52,13 +52,139 @@ ### **Python3** ```python - +class Solution: + def equalSubstring(self, s: str, t: str, maxCost: int) -> int: + n = len(s) + presum = [0] * (n + 1) + for i in range(n): + presum[i + 1] = presum[i] + abs(ord(s[i]) - ord(t[i])) + left, right = 0, n + + def check(l): + i = 0 + while i + l - 1 < n: + j = i + l - 1 + if presum[j + 1] - presum[i] <= maxCost: + return True + i += 1 + return False + + while left < right: + mid = (left + right + 1) >> 1 + if check(mid): + left = mid + else: + right = mid - 1 + return left ``` ### **Java** ```java +class Solution { + public int equalSubstring(String s, String t, int maxCost) { + int n = s.length(); + int[] presum = new int[n + 1]; + for (int i = 0; i < n; ++i) { + presum[i + 1] = presum[i] + Math.abs(s.charAt(i) - t.charAt(i)); + } + int left = 0, right = n; + while (left < right) { + int mid = (left + right + 1) >>> 1; + if (check(mid, presum, maxCost, n)) { + left = mid; + } else { + right = mid - 1; + } + } + return left; + } + + private boolean check(int l, int[] s, int maxCost, int n) { + int i = 0; + while (i + l - 1 < n) { + int j = i + l - 1; + if (s[j + 1] - s[i] <= maxCost) { + return true; + } + ++i; + } + return false; + } +} +``` + +### **C++** + +```cpp +class Solution { +public: + int equalSubstring(string s, string t, int maxCost) { + int n = s.size(); + vector presum(n + 1); + for (int i = 0; i < n; ++i) presum[i + 1] = presum[i] + abs(s[i] - t[i]); + int left = 0, right = n; + while (left < right) + { + int mid = left + right + 1 >> 1; + if (check(mid, presum, maxCost, n)) left = mid; + else right = mid - 1; + } + return left; + } + + bool check(int l, vector& s, int maxCost, int n) { + int i = 0; + while (i + l - 1 < n) + { + int j = i + l - 1; + if (s[j + 1] - s[i] <= maxCost) return true; + ++i; + } + return false; + } +}; +``` +### **Go** + +```go +func equalSubstring(s string, t string, maxCost int) int { + n := len(s) + presum := make([]int, n+1) + for i, c := range s { + presum[i+1] = presum[i] + abs(int(c)-int(t[i])) + } + + left, right := 0, n + check := func(l int) bool { + i := 0 + for i+l-1 < n { + j := i + l - 1 + if presum[j+1]-presum[i] <= maxCost { + return true + } + i++ + } + return false + } + for left < right { + mid := (left + right + 1) >> 1 + if check(mid) { + left = mid + } else { + right = mid - 1 + } + } + return left +} + +func abs(x int) int { + if x > 0 { + return x + } + return -x +} ``` ### **...** diff --git a/solution/1200-1299/1208.Get Equal Substrings Within Budget/Solution.cpp b/solution/1200-1299/1208.Get Equal Substrings Within Budget/Solution.cpp new file mode 100644 index 0000000000000..3277f7336e8e4 --- /dev/null +++ b/solution/1200-1299/1208.Get Equal Substrings Within Budget/Solution.cpp @@ -0,0 +1,27 @@ +class Solution { +public: + int equalSubstring(string s, string t, int maxCost) { + int n = s.size(); + vector presum(n + 1); + for (int i = 0; i < n; ++i) presum[i + 1] = presum[i] + abs(s[i] - t[i]); + int left = 0, right = n; + while (left < right) + { + int mid = left + right + 1 >> 1; + if (check(mid, presum, maxCost, n)) left = mid; + else right = mid - 1; + } + return left; + } + + bool check(int l, vector& s, int maxCost, int n) { + int i = 0; + while (i + l - 1 < n) + { + int j = i + l - 1; + if (s[j + 1] - s[i] <= maxCost) return true; + ++i; + } + return false; + } +}; \ No newline at end of file diff --git a/solution/1200-1299/1208.Get Equal Substrings Within Budget/Solution.go b/solution/1200-1299/1208.Get Equal Substrings Within Budget/Solution.go new file mode 100644 index 0000000000000..103c9d3df3cf1 --- /dev/null +++ b/solution/1200-1299/1208.Get Equal Substrings Within Budget/Solution.go @@ -0,0 +1,36 @@ +func equalSubstring(s string, t string, maxCost int) int { + n := len(s) + presum := make([]int, n+1) + for i, c := range s { + presum[i+1] = presum[i] + abs(int(c)-int(t[i])) + } + + left, right := 0, n + check := func(l int) bool { + i := 0 + for i+l-1 < n { + j := i + l - 1 + if presum[j+1]-presum[i] <= maxCost { + return true + } + i++ + } + return false + } + for left < right { + mid := (left + right + 1) >> 1 + if check(mid) { + left = mid + } else { + right = mid - 1 + } + } + return left +} + +func abs(x int) int { + if x > 0 { + return x + } + return -x +} \ No newline at end of file diff --git a/solution/1200-1299/1208.Get Equal Substrings Within Budget/Solution.java b/solution/1200-1299/1208.Get Equal Substrings Within Budget/Solution.java new file mode 100644 index 0000000000000..60844941bd5d4 --- /dev/null +++ b/solution/1200-1299/1208.Get Equal Substrings Within Budget/Solution.java @@ -0,0 +1,31 @@ +class Solution { + public int equalSubstring(String s, String t, int maxCost) { + int n = s.length(); + int[] presum = new int[n + 1]; + for (int i = 0; i < n; ++i) { + presum[i + 1] = presum[i] + Math.abs(s.charAt(i) - t.charAt(i)); + } + int left = 0, right = n; + while (left < right) { + int mid = (left + right + 1) >>> 1; + if (check(mid, presum, maxCost, n)) { + left = mid; + } else { + right = mid - 1; + } + } + return left; + } + + private boolean check(int l, int[] s, int maxCost, int n) { + int i = 0; + while (i + l - 1 < n) { + int j = i + l - 1; + if (s[j + 1] - s[i] <= maxCost) { + return true; + } + ++i; + } + return false; + } +} \ No newline at end of file diff --git a/solution/1200-1299/1208.Get Equal Substrings Within Budget/Solution.py b/solution/1200-1299/1208.Get Equal Substrings Within Budget/Solution.py new file mode 100644 index 0000000000000..1c763f2c49e20 --- /dev/null +++ b/solution/1200-1299/1208.Get Equal Substrings Within Budget/Solution.py @@ -0,0 +1,24 @@ +class Solution: + def equalSubstring(self, s: str, t: str, maxCost: int) -> int: + n = len(s) + presum = [0] * (n + 1) + for i in range(n): + presum[i + 1] = presum[i] + abs(ord(s[i]) - ord(t[i])) + left, right = 0, n + + def check(l): + i = 0 + while i + l - 1 < n: + j = i + l - 1 + if presum[j + 1] - presum[i] <= maxCost: + return True + i += 1 + return False + + while left < right: + mid = (left + right + 1) >> 1 + if check(mid): + left = mid + else: + right = mid - 1 + return left diff --git a/solution/2100-2199/2123.Minimum Operations to Remove Adjacent Ones in Matrix/README.md b/solution/2100-2199/2123.Minimum Operations to Remove Adjacent Ones in Matrix/README.md new file mode 100644 index 0000000000000..383ff2248f41b --- /dev/null +++ b/solution/2100-2199/2123.Minimum Operations to Remove Adjacent Ones in Matrix/README.md @@ -0,0 +1,90 @@ +# [2123. Minimum Operations to Remove Adjacent Ones in Matrix](https://leetcode-cn.com/problems/minimum-operations-to-remove-adjacent-ones-in-matrix) + +[English Version](/solution/2100-2199/2123.Minimum%20Operations%20to%20Remove%20Adjacent%20Ones%20in%20Matrix/README_EN.md) + +## 题目描述 + + + +

You are given a 0-indexed binary matrix grid. In one operation, you can flip any 1 in grid to be 0.

+ +

A binary matrix is well-isolated if there is no 1 in the matrix that is 4-directionally connected (i.e., horizontal and vertical) to another 1.

+ +

Return the minimum number of operations to make grid well-isolated.

+ +

 

+

Example 1:

+ +
+Input: grid = [[1,1,0],[0,1,1],[1,1,1]]
+Output: 3
+Explanation: Use 3 operations to change grid[0][1], grid[1][2], and grid[2][1] to 0.
+After, no more 1's are 4-directionally connected and grid is well-isolated.
+
+ +

Example 2:

+ +
+Input: grid = [[0,0,0],[0,0,0],[0,0,0]]
+Output: 0
+Explanation: There are no 1's in grid and it is well-isolated.
+No operations were done so return 0.
+
+ +

Example 3:

+ +
+Input: grid = [[0,1],[1,0]]
+Output: 0
+Explanation: None of the 1's are 4-directionally connected and grid is well-isolated.
+No operations were done so return 0.
+
+ +

 

+

Constraints:

+ +
    +
  • m == grid.length
  • +
  • n == grid[i].length
  • +
  • 1 <= m, n <= 300
  • +
  • grid[i][j] is either 0 or 1.
  • +
+ + +## 解法 + + + + + +### **Python3** + + + +```python + +``` + +### **Java** + + + +```java + +``` + +### **TypeScript** + + + +```ts + +``` + +### **...** + +``` + +``` + + diff --git a/solution/2100-2199/2123.Minimum Operations to Remove Adjacent Ones in Matrix/README_EN.md b/solution/2100-2199/2123.Minimum Operations to Remove Adjacent Ones in Matrix/README_EN.md new file mode 100644 index 0000000000000..fb1eb8f387f4c --- /dev/null +++ b/solution/2100-2199/2123.Minimum Operations to Remove Adjacent Ones in Matrix/README_EN.md @@ -0,0 +1,80 @@ +# [2123. Minimum Operations to Remove Adjacent Ones in Matrix](https://leetcode.com/problems/minimum-operations-to-remove-adjacent-ones-in-matrix) + +[中文文档](/solution/2100-2199/2123.Minimum%20Operations%20to%20Remove%20Adjacent%20Ones%20in%20Matrix/README.md) + +## Description + +

You are given a 0-indexed binary matrix grid. In one operation, you can flip any 1 in grid to be 0.

+ +

A binary matrix is well-isolated if there is no 1 in the matrix that is 4-directionally connected (i.e., horizontal and vertical) to another 1.

+ +

Return the minimum number of operations to make grid well-isolated.

+ +

 

+

Example 1:

+ +
+Input: grid = [[1,1,0],[0,1,1],[1,1,1]]
+Output: 3
+Explanation: Use 3 operations to change grid[0][1], grid[1][2], and grid[2][1] to 0.
+After, no more 1's are 4-directionally connected and grid is well-isolated.
+
+ +

Example 2:

+ +
+Input: grid = [[0,0,0],[0,0,0],[0,0,0]]
+Output: 0
+Explanation: There are no 1's in grid and it is well-isolated.
+No operations were done so return 0.
+
+ +

Example 3:

+ +
+Input: grid = [[0,1],[1,0]]
+Output: 0
+Explanation: None of the 1's are 4-directionally connected and grid is well-isolated.
+No operations were done so return 0.
+
+ +

 

+

Constraints:

+ +
    +
  • m == grid.length
  • +
  • n == grid[i].length
  • +
  • 1 <= m, n <= 300
  • +
  • grid[i][j] is either 0 or 1.
  • +
+ + +## Solutions + + + +### **Python3** + +```python + +``` + +### **Java** + +```java + +``` + +### **TypeScript** + +```ts + +``` + +### **...** + +``` + +``` + + diff --git a/solution/2100-2199/2123.Minimum Operations to Remove Adjacent Ones in Matrix/images/image-20211223181501-1.png b/solution/2100-2199/2123.Minimum Operations to Remove Adjacent Ones in Matrix/images/image-20211223181501-1.png new file mode 100644 index 0000000000000000000000000000000000000000..2831dcd22b0bf470c0ffd5767188a21035acee1d GIT binary patch literal 25153 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 F{SRZvx4!@Y literal 0 HcmV?d00001 diff --git a/solution/README.md b/solution/README.md index bca4a027d7aba..bb2ca53755928 100644 --- a/solution/README.md +++ b/solution/README.md @@ -58,6 +58,7 @@ | [0045](https://leetcode-cn.com/problems/jump-game-ii) | [跳跃游戏 II](/solution/0000-0099/0045.Jump%20Game%20II/README.md) | `贪心`,`数组`,`动态规划` | 中等 | | | [0046](https://leetcode-cn.com/problems/permutations) | [全排列](/solution/0000-0099/0046.Permutations/README.md) | `数组`,`回溯` | 中等 | | | [0047](https://leetcode-cn.com/problems/permutations-ii) | [全排列 II](/solution/0000-0099/0047.Permutations%20II/README.md) | `数组`,`回溯` | 中等 | | +| [0048](https://leetcode-cn.com/problems/rotate-image) | [旋转图像](/solution/0000-0099/0048.Rotate%20Image/README.md) | `数组`,`数学`,`矩阵` | 中等 | | | [0049](https://leetcode-cn.com/problems/group-anagrams) | [字母异位词分组](/solution/0000-0099/0049.Group%20Anagrams/README.md) | `哈希表`,`字符串`,`排序` | 中等 | | | [0050](https://leetcode-cn.com/problems/powx-n) | [Pow(x, n)](/solution/0000-0099/0050.Pow%28x%2C%20n%29/README.md) | `递归`,`数学` | 中等 | | | [0051](https://leetcode-cn.com/problems/n-queens) | [N 皇后](/solution/0000-0099/0051.N-Queens/README.md) | `数组`,`回溯` | 困难 | | @@ -790,7 +791,9 @@ | [0778](https://leetcode-cn.com/problems/swim-in-rising-water) | [水位上升的泳池中游泳](/solution/0700-0799/0778.Swim%20in%20Rising%20Water/README.md) | `深度优先搜索`,`广度优先搜索`,`并查集`,`数组`,`二分查找`,`矩阵`,`堆(优先队列)` | 困难 | | | [0779](https://leetcode-cn.com/problems/k-th-symbol-in-grammar) | [第K个语法符号](/solution/0700-0799/0779.K-th%20Symbol%20in%20Grammar/README.md) | `位运算`,`递归`,`数学` | 中等 | | | [0780](https://leetcode-cn.com/problems/reaching-points) | [到达终点](/solution/0700-0799/0780.Reaching%20Points/README.md) | `数学` | 困难 | | +| [0781](https://leetcode-cn.com/problems/rabbits-in-forest) | [森林中的兔子](/solution/0700-0799/0781.Rabbits%20in%20Forest/README.md) | `贪心`,`数组`,`哈希表`,`数学` | 中等 | | | [0782](https://leetcode-cn.com/problems/transform-to-chessboard) | [变为棋盘](/solution/0700-0799/0782.Transform%20to%20Chessboard/README.md) | `位运算`,`数组`,`数学`,`矩阵` | 困难 | | +| [0783](https://leetcode-cn.com/problems/minimum-distance-between-bst-nodes) | [二叉搜索树节点最小距离](/solution/0700-0799/0783.Minimum%20Distance%20Between%20BST%20Nodes/README.md) | `树`,`深度优先搜索`,`广度优先搜索`,`二叉搜索树`,`二叉树` | 简单 | | | [0784](https://leetcode-cn.com/problems/letter-case-permutation) | [字母大小写全排列](/solution/0700-0799/0784.Letter%20Case%20Permutation/README.md) | `位运算`,`字符串`,`回溯` | 中等 | | | [0785](https://leetcode-cn.com/problems/is-graph-bipartite) | [判断二分图](/solution/0700-0799/0785.Is%20Graph%20Bipartite/README.md) | `深度优先搜索`,`广度优先搜索`,`并查集`,`图` | 中等 | | | [0786](https://leetcode-cn.com/problems/k-th-smallest-prime-fraction) | [第 K 个最小的素数分数](/solution/0700-0799/0786.K-th%20Smallest%20Prime%20Fraction/README.md) | `数组`,`二分查找`,`堆(优先队列)` | 困难 | | @@ -812,7 +815,9 @@ | [0802](https://leetcode-cn.com/problems/find-eventual-safe-states) | [找到最终的安全状态](/solution/0800-0899/0802.Find%20Eventual%20Safe%20States/README.md) | `深度优先搜索`,`广度优先搜索`,`图`,`拓扑排序` | 中等 | | | [0803](https://leetcode-cn.com/problems/bricks-falling-when-hit) | [打砖块](/solution/0800-0899/0803.Bricks%20Falling%20When%20Hit/README.md) | `并查集`,`数组`,`矩阵` | 困难 | | | [0804](https://leetcode-cn.com/problems/unique-morse-code-words) | [唯一摩尔斯密码词](/solution/0800-0899/0804.Unique%20Morse%20Code%20Words/README.md) | `数组`,`哈希表`,`字符串` | 简单 | | +| [0805](https://leetcode-cn.com/problems/split-array-with-same-average) | [数组的均值分割](/solution/0800-0899/0805.Split%20Array%20With%20Same%20Average/README.md) | `位运算`,`数组`,`数学`,`动态规划`,`状态压缩` | 困难 | | | [0806](https://leetcode-cn.com/problems/number-of-lines-to-write-string) | [写字符串需要的行数](/solution/0800-0899/0806.Number%20of%20Lines%20To%20Write%20String/README.md) | `数组`,`字符串` | 简单 | | +| [0807](https://leetcode-cn.com/problems/max-increase-to-keep-city-skyline) | [保持城市天际线](/solution/0800-0899/0807.Max%20Increase%20to%20Keep%20City%20Skyline/README.md) | `贪心`,`数组`,`矩阵` | 中等 | | | [0808](https://leetcode-cn.com/problems/soup-servings) | [分汤](/solution/0800-0899/0808.Soup%20Servings/README.md) | `数学`,`动态规划`,`概率与统计` | 中等 | | | [0809](https://leetcode-cn.com/problems/expressive-words) | [情感丰富的文字](/solution/0800-0899/0809.Expressive%20Words/README.md) | `数组`,`双指针`,`字符串` | 中等 | | | [0810](https://leetcode-cn.com/problems/chalkboard-xor-game) | [黑板异或游戏](/solution/0800-0899/0810.Chalkboard%20XOR%20Game/README.md) | `位运算`,`脑筋急转弯`,`数组`,`数学`,`博弈` | 困难 | | @@ -1941,7 +1946,7 @@ | [1933](https://leetcode-cn.com/problems/check-if-string-is-decomposable-into-value-equal-substrings) | [判断字符串是否可分解为值均等的子串](/solution/1900-1999/1933.Check%20if%20String%20Is%20Decomposable%20Into%20Value-Equal%20Substrings/README.md) | `字符串` | 简单 | 🔒 | | [1934](https://leetcode-cn.com/problems/confirmation-rate) | [Confirmation Rate](/solution/1900-1999/1934.Confirmation%20Rate/README.md) | `数据库` | 中等 | 🔒 | | [1935](https://leetcode-cn.com/problems/maximum-number-of-words-you-can-type) | [可以输入的最大单词数](/solution/1900-1999/1935.Maximum%20Number%20of%20Words%20You%20Can%20Type/README.md) | `哈希表`,`字符串` | 简单 | | -| [1936](https://leetcode-cn.com/problems/add-minimum-number-of-rungs) | [新增的最少台阶数](/solution/1900-1999/1936.Add%20Minimum%20Number%20of%20Rungs/README.md) | | 中等 | | +| [1936](https://leetcode-cn.com/problems/add-minimum-number-of-rungs) | [新增的最少台阶数](/solution/1900-1999/1936.Add%20Minimum%20Number%20of%20Rungs/README.md) | `贪心`,`数组` | 中等 | | | [1937](https://leetcode-cn.com/problems/maximum-number-of-points-with-cost) | [扣分后的最大得分](/solution/1900-1999/1937.Maximum%20Number%20of%20Points%20with%20Cost/README.md) | | 中等 | | | [1938](https://leetcode-cn.com/problems/maximum-genetic-difference-query) | [查询最大基因差](/solution/1900-1999/1938.Maximum%20Genetic%20Difference%20Query/README.md) | | 困难 | | | [1939](https://leetcode-cn.com/problems/users-that-actively-request-confirmation-messages) | [主动请求确认消息的用户](/solution/1900-1999/1939.Users%20That%20Actively%20Request%20Confirmation%20Messages/README.md) | `数据库` | 简单 | 🔒 | @@ -2026,17 +2031,17 @@ | [2018](https://leetcode-cn.com/problems/check-if-word-can-be-placed-in-crossword) | [判断单词是否能放入填字游戏内](/solution/2000-2099/2018.Check%20if%20Word%20Can%20Be%20Placed%20In%20Crossword/README.md) | `数组`,`枚举`,`矩阵` | 中等 | | | [2019](https://leetcode-cn.com/problems/the-score-of-students-solving-math-expression) | [解出数学表达式的学生分数](/solution/2000-2099/2019.The%20Score%20of%20Students%20Solving%20Math%20Expression/README.md) | `栈`,`记忆化搜索`,`数组`,`数学`,`字符串`,`动态规划` | 困难 | | | [2020](https://leetcode-cn.com/problems/number-of-accounts-that-did-not-stream) | [Number of Accounts That Did Not Stream](/solution/2000-2099/2020.Number%20of%20Accounts%20That%20Did%20Not%20Stream/README.md) | `数据库` | 中等 | 🔒 | -| [2021](https://leetcode-cn.com/problems/brightest-position-on-street) | [街上最亮的位置](/solution/2000-2099/2021.Brightest%20Position%20on%20Street/README.md) | `数组`,`有序集合`,`前缀和` | 中等 | | +| [2021](https://leetcode-cn.com/problems/brightest-position-on-street) | [街上最亮的位置](/solution/2000-2099/2021.Brightest%20Position%20on%20Street/README.md) | `数组`,`有序集合`,`前缀和` | 中等 | 🔒 | | [2022](https://leetcode-cn.com/problems/convert-1d-array-into-2d-array) | [将一维数组转变成二维数组](/solution/2000-2099/2022.Convert%201D%20Array%20Into%202D%20Array/README.md) | `数组`,`矩阵`,`模拟` | 简单 | | | [2023](https://leetcode-cn.com/problems/number-of-pairs-of-strings-with-concatenation-equal-to-target) | [连接后等于目标字符串的字符串对](/solution/2000-2099/2023.Number%20of%20Pairs%20of%20Strings%20With%20Concatenation%20Equal%20to%20Target/README.md) | `数组`,`字符串` | 中等 | | | [2024](https://leetcode-cn.com/problems/maximize-the-confusion-of-an-exam) | [考试的最大困扰度](/solution/2000-2099/2024.Maximize%20the%20Confusion%20of%20an%20Exam/README.md) | `字符串`,`二分查找`,`前缀和`,`滑动窗口` | 中等 | | | [2025](https://leetcode-cn.com/problems/maximum-number-of-ways-to-partition-an-array) | [分割数组的最多方案数](/solution/2000-2099/2025.Maximum%20Number%20of%20Ways%20to%20Partition%20an%20Array/README.md) | `数组`,`哈希表`,`计数`,`枚举`,`前缀和` | 困难 | | -| [2026](https://leetcode-cn.com/problems/low-quality-problems) | [低质量的问题](/solution/2000-2099/2026.Low-Quality%20Problems/README.md) | `数据库` | 简单 | | +| [2026](https://leetcode-cn.com/problems/low-quality-problems) | [低质量的问题](/solution/2000-2099/2026.Low-Quality%20Problems/README.md) | `数据库` | 简单 | 🔒 | | [2027](https://leetcode-cn.com/problems/minimum-moves-to-convert-string) | [转换字符串的最少操作次数](/solution/2000-2099/2027.Minimum%20Moves%20to%20Convert%20String/README.md) | `贪心`,`字符串` | 简单 | | | [2028](https://leetcode-cn.com/problems/find-missing-observations) | [找出缺失的观测数据](/solution/2000-2099/2028.Find%20Missing%20Observations/README.md) | `数组`,`数学`,`模拟` | 中等 | | | [2029](https://leetcode-cn.com/problems/stone-game-ix) | [石子游戏 IX](/solution/2000-2099/2029.Stone%20Game%20IX/README.md) | `贪心`,`数组`,`数学`,`计数`,`博弈` | 中等 | | | [2030](https://leetcode-cn.com/problems/smallest-k-length-subsequence-with-occurrences-of-a-letter) | [含特定字母的最小子序列](/solution/2000-2099/2030.Smallest%20K-Length%20Subsequence%20With%20Occurrences%20of%20a%20Letter/README.md) | `栈`,`贪心`,`字符串`,`单调栈` | 困难 | | -| [2031](https://leetcode-cn.com/problems/count-subarrays-with-more-ones-than-zeros) | [1 比 0 多的子数组个数](/solution/2000-2099/2031.Count%20Subarrays%20With%20More%20Ones%20Than%20Zeros/README.md) | `树状数组`,`线段树`,`数组`,`二分查找`,`分治`,`有序集合`,`归并排序` | 中等 | | +| [2031](https://leetcode-cn.com/problems/count-subarrays-with-more-ones-than-zeros) | [1 比 0 多的子数组个数](/solution/2000-2099/2031.Count%20Subarrays%20With%20More%20Ones%20Than%20Zeros/README.md) | `树状数组`,`线段树`,`数组`,`二分查找`,`分治`,`有序集合`,`归并排序` | 中等 | 🔒 | | [2032](https://leetcode-cn.com/problems/two-out-of-three) | [至少在两个数组中出现的值](/solution/2000-2099/2032.Two%20Out%20of%20Three/README.md) | `数组`,`哈希表` | 简单 | | | [2033](https://leetcode-cn.com/problems/minimum-operations-to-make-a-uni-value-grid) | [获取单值网格的最小操作数](/solution/2000-2099/2033.Minimum%20Operations%20to%20Make%20a%20Uni-Value%20Grid/README.md) | `数组`,`数学`,`矩阵`,`排序` | 中等 | | | [2034](https://leetcode-cn.com/problems/stock-price-fluctuation) | [股票价格波动](/solution/2000-2099/2034.Stock%20Price%20Fluctuation/README.md) | `设计`,`哈希表`,`数据流`,`有序集合`,`堆(优先队列)` | 中等 | | @@ -2118,16 +2123,17 @@ | [2110](https://leetcode-cn.com/problems/number-of-smooth-descent-periods-of-a-stock) | [股票平滑下跌阶段的数目](/solution/2100-2199/2110.Number%20of%20Smooth%20Descent%20Periods%20of%20a%20Stock/README.md) | `数组`,`数学`,`动态规划` | 中等 | | | [2111](https://leetcode-cn.com/problems/minimum-operations-to-make-the-array-k-increasing) | [使数组 K 递增的最少操作次数](/solution/2100-2199/2111.Minimum%20Operations%20to%20Make%20the%20Array%20K-Increasing/README.md) | `数组`,`二分查找` | 困难 | | | [2112](https://leetcode-cn.com/problems/the-airport-with-the-most-traffic) | [The Airport With the Most Traffic](/solution/2100-2199/2112.The%20Airport%20With%20the%20Most%20Traffic/README.md) | `数据库` | 中等 | 🔒 | -| [2113](https://leetcode-cn.com/problems/elements-in-array-after-removing-and-replacing-elements) | [Elements in Array After Removing and Replacing Elements](/solution/2100-2199/2113.Elements%20in%20Array%20After%20Removing%20and%20Replacing%20Elements/README.md) | | 中等 | 🔒 | -| [2114](https://leetcode-cn.com/problems/maximum-number-of-words-found-in-sentences) | [句子中的最多单词数](/solution/2100-2199/2114.Maximum%20Number%20of%20Words%20Found%20in%20Sentences/README.md) | | 简单 | | -| [2115](https://leetcode-cn.com/problems/find-all-possible-recipes-from-given-supplies) | [从给定原材料中找到所有可以做出的菜](/solution/2100-2199/2115.Find%20All%20Possible%20Recipes%20from%20Given%20Supplies/README.md) | | 中等 | | -| [2116](https://leetcode-cn.com/problems/check-if-a-parentheses-string-can-be-valid) | [判断一个括号字符串是否有效](/solution/2100-2199/2116.Check%20if%20a%20Parentheses%20String%20Can%20Be%20Valid/README.md) | | 中等 | | -| [2117](https://leetcode-cn.com/problems/abbreviating-the-product-of-a-range) | [一个区间内所有数乘积的缩写](/solution/2100-2199/2117.Abbreviating%20the%20Product%20of%20a%20Range/README.md) | | 困难 | | -| [2118](https://leetcode-cn.com/problems/build-the-equation) | [Build the Equation](/solution/2100-2199/2118.Build%20the%20Equation/README.md) | | 困难 | 🔒 | -| [2119](https://leetcode-cn.com/problems/a-number-after-a-double-reversal) | [反转两次的数字](/solution/2100-2199/2119.A%20Number%20After%20a%20Double%20Reversal/README.md) | | 简单 | | -| [2120](https://leetcode-cn.com/problems/execution-of-all-suffix-instructions-staying-in-a-grid) | [执行所有后缀指令](/solution/2100-2199/2120.Execution%20of%20All%20Suffix%20Instructions%20Staying%20in%20a%20Grid/README.md) | | 中等 | | -| [2121](https://leetcode-cn.com/problems/intervals-between-identical-elements) | [相同元素的间隔之和](/solution/2100-2199/2121.Intervals%20Between%20Identical%20Elements/README.md) | | 中等 | | -| [2122](https://leetcode-cn.com/problems/recover-the-original-array) | [还原原数组](/solution/2100-2199/2122.Recover%20the%20Original%20Array/README.md) | | 困难 | | +| [2113](https://leetcode-cn.com/problems/elements-in-array-after-removing-and-replacing-elements) | [Elements in Array After Removing and Replacing Elements](/solution/2100-2199/2113.Elements%20in%20Array%20After%20Removing%20and%20Replacing%20Elements/README.md) | `数组` | 中等 | 🔒 | +| [2114](https://leetcode-cn.com/problems/maximum-number-of-words-found-in-sentences) | [句子中的最多单词数](/solution/2100-2199/2114.Maximum%20Number%20of%20Words%20Found%20in%20Sentences/README.md) | `数组`,`字符串` | 简单 | | +| [2115](https://leetcode-cn.com/problems/find-all-possible-recipes-from-given-supplies) | [从给定原材料中找到所有可以做出的菜](/solution/2100-2199/2115.Find%20All%20Possible%20Recipes%20from%20Given%20Supplies/README.md) | `图`,`拓扑排序`,`数组`,`哈希表`,`字符串` | 中等 | | +| [2116](https://leetcode-cn.com/problems/check-if-a-parentheses-string-can-be-valid) | [判断一个括号字符串是否有效](/solution/2100-2199/2116.Check%20if%20a%20Parentheses%20String%20Can%20Be%20Valid/README.md) | `栈`,`贪心`,`字符串` | 中等 | | +| [2117](https://leetcode-cn.com/problems/abbreviating-the-product-of-a-range) | [一个区间内所有数乘积的缩写](/solution/2100-2199/2117.Abbreviating%20the%20Product%20of%20a%20Range/README.md) | `数学` | 困难 | | +| [2118](https://leetcode-cn.com/problems/build-the-equation) | [Build the Equation](/solution/2100-2199/2118.Build%20the%20Equation/README.md) | `数据库` | 困难 | 🔒 | +| [2119](https://leetcode-cn.com/problems/a-number-after-a-double-reversal) | [反转两次的数字](/solution/2100-2199/2119.A%20Number%20After%20a%20Double%20Reversal/README.md) | `数学` | 简单 | | +| [2120](https://leetcode-cn.com/problems/execution-of-all-suffix-instructions-staying-in-a-grid) | [执行所有后缀指令](/solution/2100-2199/2120.Execution%20of%20All%20Suffix%20Instructions%20Staying%20in%20a%20Grid/README.md) | `字符串`,`模拟` | 中等 | | +| [2121](https://leetcode-cn.com/problems/intervals-between-identical-elements) | [相同元素的间隔之和](/solution/2100-2199/2121.Intervals%20Between%20Identical%20Elements/README.md) | `数组`,`哈希表`,`前缀和` | 中等 | | +| [2122](https://leetcode-cn.com/problems/recover-the-original-array) | [还原原数组](/solution/2100-2199/2122.Recover%20the%20Original%20Array/README.md) | `数组`,`哈希表`,`枚举`,`排序` | 困难 | | +| [2123](https://leetcode-cn.com/problems/minimum-operations-to-remove-adjacent-ones-in-matrix) | [Minimum Operations to Remove Adjacent Ones in Matrix](/solution/2100-2199/2123.Minimum%20Operations%20to%20Remove%20Adjacent%20Ones%20in%20Matrix/README.md) | | 困难 | 🔒 | ## 版权 diff --git a/solution/README_EN.md b/solution/README_EN.md index 6e0567f085919..6982fc453d911 100644 --- a/solution/README_EN.md +++ b/solution/README_EN.md @@ -56,6 +56,7 @@ Press Control+F(or Command+F on the | [0045](https://leetcode.com/problems/jump-game-ii) | [Jump Game II](/solution/0000-0099/0045.Jump%20Game%20II/README_EN.md) | `Greedy`,`Array`,`Dynamic Programming` | Medium | | | [0046](https://leetcode.com/problems/permutations) | [Permutations](/solution/0000-0099/0046.Permutations/README_EN.md) | `Array`,`Backtracking` | Medium | | | [0047](https://leetcode.com/problems/permutations-ii) | [Permutations II](/solution/0000-0099/0047.Permutations%20II/README_EN.md) | `Array`,`Backtracking` | Medium | | +| [0048](https://leetcode.com/problems/rotate-image) | [Rotate Image](/solution/0000-0099/0048.Rotate%20Image/README_EN.md) | `Array`,`Math`,`Matrix` | Medium | | | [0049](https://leetcode.com/problems/group-anagrams) | [Group Anagrams](/solution/0000-0099/0049.Group%20Anagrams/README_EN.md) | `Hash Table`,`String`,`Sorting` | Medium | | | [0050](https://leetcode.com/problems/powx-n) | [Pow(x, n)](/solution/0000-0099/0050.Pow%28x%2C%20n%29/README_EN.md) | `Recursion`,`Math` | Medium | | | [0051](https://leetcode.com/problems/n-queens) | [N-Queens](/solution/0000-0099/0051.N-Queens/README_EN.md) | `Array`,`Backtracking` | Hard | | @@ -788,7 +789,9 @@ Press Control+F(or Command+F on the | [0778](https://leetcode.com/problems/swim-in-rising-water) | [Swim in Rising Water](/solution/0700-0799/0778.Swim%20in%20Rising%20Water/README_EN.md) | `Depth-First Search`,`Breadth-First Search`,`Union Find`,`Array`,`Binary Search`,`Matrix`,`Heap (Priority Queue)` | Hard | | | [0779](https://leetcode.com/problems/k-th-symbol-in-grammar) | [K-th Symbol in Grammar](/solution/0700-0799/0779.K-th%20Symbol%20in%20Grammar/README_EN.md) | `Bit Manipulation`,`Recursion`,`Math` | Medium | | | [0780](https://leetcode.com/problems/reaching-points) | [Reaching Points](/solution/0700-0799/0780.Reaching%20Points/README_EN.md) | `Math` | Hard | | +| [0781](https://leetcode.com/problems/rabbits-in-forest) | [Rabbits in Forest](/solution/0700-0799/0781.Rabbits%20in%20Forest/README_EN.md) | `Greedy`,`Array`,`Hash Table`,`Math` | Medium | | | [0782](https://leetcode.com/problems/transform-to-chessboard) | [Transform to Chessboard](/solution/0700-0799/0782.Transform%20to%20Chessboard/README_EN.md) | `Bit Manipulation`,`Array`,`Math`,`Matrix` | Hard | | +| [0783](https://leetcode.com/problems/minimum-distance-between-bst-nodes) | [Minimum Distance Between BST Nodes](/solution/0700-0799/0783.Minimum%20Distance%20Between%20BST%20Nodes/README_EN.md) | `Tree`,`Depth-First Search`,`Breadth-First Search`,`Binary Search Tree`,`Binary Tree` | Easy | | | [0784](https://leetcode.com/problems/letter-case-permutation) | [Letter Case Permutation](/solution/0700-0799/0784.Letter%20Case%20Permutation/README_EN.md) | `Bit Manipulation`,`String`,`Backtracking` | Medium | | | [0785](https://leetcode.com/problems/is-graph-bipartite) | [Is Graph Bipartite](/solution/0700-0799/0785.Is%20Graph%20Bipartite/README_EN.md) | `Depth-First Search`,`Breadth-First Search`,`Union Find`,`Graph` | Medium | | | [0786](https://leetcode.com/problems/k-th-smallest-prime-fraction) | [K-th Smallest Prime Fraction](/solution/0700-0799/0786.K-th%20Smallest%20Prime%20Fraction/README_EN.md) | `Array`,`Binary Search`,`Heap (Priority Queue)` | Hard | | @@ -810,7 +813,9 @@ Press Control+F(or Command+F on the | [0802](https://leetcode.com/problems/find-eventual-safe-states) | [Find Eventual Safe States](/solution/0800-0899/0802.Find%20Eventual%20Safe%20States/README_EN.md) | `Depth-First Search`,`Breadth-First Search`,`Graph`,`Topological Sort` | Medium | | | [0803](https://leetcode.com/problems/bricks-falling-when-hit) | [Bricks Falling When Hit](/solution/0800-0899/0803.Bricks%20Falling%20When%20Hit/README_EN.md) | `Union Find`,`Array`,`Matrix` | Hard | | | [0804](https://leetcode.com/problems/unique-morse-code-words) | [Unique Morse Code Words](/solution/0800-0899/0804.Unique%20Morse%20Code%20Words/README_EN.md) | `Array`,`Hash Table`,`String` | Easy | | +| [0805](https://leetcode.com/problems/split-array-with-same-average) | [Split Array With Same Average](/solution/0800-0899/0805.Split%20Array%20With%20Same%20Average/README_EN.md) | `Bit Manipulation`,`Array`,`Math`,`Dynamic Programming`,`Bitmask` | Hard | | | [0806](https://leetcode.com/problems/number-of-lines-to-write-string) | [Number of Lines To Write String](/solution/0800-0899/0806.Number%20of%20Lines%20To%20Write%20String/README_EN.md) | `Array`,`String` | Easy | | +| [0807](https://leetcode.com/problems/max-increase-to-keep-city-skyline) | [Max Increase to Keep City Skyline](/solution/0800-0899/0807.Max%20Increase%20to%20Keep%20City%20Skyline/README_EN.md) | `Greedy`,`Array`,`Matrix` | Medium | | | [0808](https://leetcode.com/problems/soup-servings) | [Soup Servings](/solution/0800-0899/0808.Soup%20Servings/README_EN.md) | `Math`,`Dynamic Programming`,`Probability and Statistics` | Medium | | | [0809](https://leetcode.com/problems/expressive-words) | [Expressive Words](/solution/0800-0899/0809.Expressive%20Words/README_EN.md) | `Array`,`Two Pointers`,`String` | Medium | | | [0810](https://leetcode.com/problems/chalkboard-xor-game) | [Chalkboard XOR Game](/solution/0800-0899/0810.Chalkboard%20XOR%20Game/README_EN.md) | `Bit Manipulation`,`Brainteaser`,`Array`,`Math`,`Game Theory` | Hard | | @@ -1939,7 +1944,7 @@ Press Control+F(or Command+F on the | [1933](https://leetcode.com/problems/check-if-string-is-decomposable-into-value-equal-substrings) | [Check if String Is Decomposable Into Value-Equal Substrings](/solution/1900-1999/1933.Check%20if%20String%20Is%20Decomposable%20Into%20Value-Equal%20Substrings/README_EN.md) | `String` | Easy | 🔒 | | [1934](https://leetcode.com/problems/confirmation-rate) | [Confirmation Rate](/solution/1900-1999/1934.Confirmation%20Rate/README_EN.md) | `Database` | Medium | 🔒 | | [1935](https://leetcode.com/problems/maximum-number-of-words-you-can-type) | [Maximum Number of Words You Can Type](/solution/1900-1999/1935.Maximum%20Number%20of%20Words%20You%20Can%20Type/README_EN.md) | `Hash Table`,`String` | Easy | | -| [1936](https://leetcode.com/problems/add-minimum-number-of-rungs) | [Add Minimum Number of Rungs](/solution/1900-1999/1936.Add%20Minimum%20Number%20of%20Rungs/README_EN.md) | | Medium | | +| [1936](https://leetcode.com/problems/add-minimum-number-of-rungs) | [Add Minimum Number of Rungs](/solution/1900-1999/1936.Add%20Minimum%20Number%20of%20Rungs/README_EN.md) | `Greedy`,`Array` | Medium | | | [1937](https://leetcode.com/problems/maximum-number-of-points-with-cost) | [Maximum Number of Points with Cost](/solution/1900-1999/1937.Maximum%20Number%20of%20Points%20with%20Cost/README_EN.md) | | Medium | | | [1938](https://leetcode.com/problems/maximum-genetic-difference-query) | [Maximum Genetic Difference Query](/solution/1900-1999/1938.Maximum%20Genetic%20Difference%20Query/README_EN.md) | | Hard | | | [1939](https://leetcode.com/problems/users-that-actively-request-confirmation-messages) | [Users That Actively Request Confirmation Messages](/solution/1900-1999/1939.Users%20That%20Actively%20Request%20Confirmation%20Messages/README_EN.md) | `Database` | Easy | 🔒 | @@ -2116,16 +2121,17 @@ Press Control+F(or Command+F on the | [2110](https://leetcode.com/problems/number-of-smooth-descent-periods-of-a-stock) | [Number of Smooth Descent Periods of a Stock](/solution/2100-2199/2110.Number%20of%20Smooth%20Descent%20Periods%20of%20a%20Stock/README_EN.md) | `Array`,`Math`,`Dynamic Programming` | Medium | | | [2111](https://leetcode.com/problems/minimum-operations-to-make-the-array-k-increasing) | [Minimum Operations to Make the Array K-Increasing](/solution/2100-2199/2111.Minimum%20Operations%20to%20Make%20the%20Array%20K-Increasing/README_EN.md) | `Array`,`Binary Search` | Hard | | | [2112](https://leetcode.com/problems/the-airport-with-the-most-traffic) | [The Airport With the Most Traffic](/solution/2100-2199/2112.The%20Airport%20With%20the%20Most%20Traffic/README_EN.md) | `Database` | Medium | 🔒 | -| [2113](https://leetcode.com/problems/elements-in-array-after-removing-and-replacing-elements) | [Elements in Array After Removing and Replacing Elements](/solution/2100-2199/2113.Elements%20in%20Array%20After%20Removing%20and%20Replacing%20Elements/README_EN.md) | | Medium | 🔒 | -| [2114](https://leetcode.com/problems/maximum-number-of-words-found-in-sentences) | [Maximum Number of Words Found in Sentences](/solution/2100-2199/2114.Maximum%20Number%20of%20Words%20Found%20in%20Sentences/README_EN.md) | | Easy | | -| [2115](https://leetcode.com/problems/find-all-possible-recipes-from-given-supplies) | [Find All Possible Recipes from Given Supplies](/solution/2100-2199/2115.Find%20All%20Possible%20Recipes%20from%20Given%20Supplies/README_EN.md) | | Medium | | -| [2116](https://leetcode.com/problems/check-if-a-parentheses-string-can-be-valid) | [Check if a Parentheses String Can Be Valid](/solution/2100-2199/2116.Check%20if%20a%20Parentheses%20String%20Can%20Be%20Valid/README_EN.md) | | Medium | | -| [2117](https://leetcode.com/problems/abbreviating-the-product-of-a-range) | [Abbreviating the Product of a Range](/solution/2100-2199/2117.Abbreviating%20the%20Product%20of%20a%20Range/README_EN.md) | | Hard | | -| [2118](https://leetcode.com/problems/build-the-equation) | [Build the Equation](/solution/2100-2199/2118.Build%20the%20Equation/README_EN.md) | | Hard | 🔒 | -| [2119](https://leetcode.com/problems/a-number-after-a-double-reversal) | [A Number After a Double Reversal](/solution/2100-2199/2119.A%20Number%20After%20a%20Double%20Reversal/README_EN.md) | | Easy | | -| [2120](https://leetcode.com/problems/execution-of-all-suffix-instructions-staying-in-a-grid) | [Execution of All Suffix Instructions Staying in a Grid](/solution/2100-2199/2120.Execution%20of%20All%20Suffix%20Instructions%20Staying%20in%20a%20Grid/README_EN.md) | | Medium | | -| [2121](https://leetcode.com/problems/intervals-between-identical-elements) | [Intervals Between Identical Elements](/solution/2100-2199/2121.Intervals%20Between%20Identical%20Elements/README_EN.md) | | Medium | | -| [2122](https://leetcode.com/problems/recover-the-original-array) | [Recover the Original Array](/solution/2100-2199/2122.Recover%20the%20Original%20Array/README_EN.md) | | Hard | | +| [2113](https://leetcode.com/problems/elements-in-array-after-removing-and-replacing-elements) | [Elements in Array After Removing and Replacing Elements](/solution/2100-2199/2113.Elements%20in%20Array%20After%20Removing%20and%20Replacing%20Elements/README_EN.md) | `Array` | Medium | 🔒 | +| [2114](https://leetcode.com/problems/maximum-number-of-words-found-in-sentences) | [Maximum Number of Words Found in Sentences](/solution/2100-2199/2114.Maximum%20Number%20of%20Words%20Found%20in%20Sentences/README_EN.md) | `Array`,`String` | Easy | | +| [2115](https://leetcode.com/problems/find-all-possible-recipes-from-given-supplies) | [Find All Possible Recipes from Given Supplies](/solution/2100-2199/2115.Find%20All%20Possible%20Recipes%20from%20Given%20Supplies/README_EN.md) | `Graph`,`Topological Sort`,`Array`,`Hash Table`,`String` | Medium | | +| [2116](https://leetcode.com/problems/check-if-a-parentheses-string-can-be-valid) | [Check if a Parentheses String Can Be Valid](/solution/2100-2199/2116.Check%20if%20a%20Parentheses%20String%20Can%20Be%20Valid/README_EN.md) | `Stack`,`Greedy`,`String` | Medium | | +| [2117](https://leetcode.com/problems/abbreviating-the-product-of-a-range) | [Abbreviating the Product of a Range](/solution/2100-2199/2117.Abbreviating%20the%20Product%20of%20a%20Range/README_EN.md) | `Math` | Hard | | +| [2118](https://leetcode.com/problems/build-the-equation) | [Build the Equation](/solution/2100-2199/2118.Build%20the%20Equation/README_EN.md) | `Database` | Hard | 🔒 | +| [2119](https://leetcode.com/problems/a-number-after-a-double-reversal) | [A Number After a Double Reversal](/solution/2100-2199/2119.A%20Number%20After%20a%20Double%20Reversal/README_EN.md) | `Math` | Easy | | +| [2120](https://leetcode.com/problems/execution-of-all-suffix-instructions-staying-in-a-grid) | [Execution of All Suffix Instructions Staying in a Grid](/solution/2100-2199/2120.Execution%20of%20All%20Suffix%20Instructions%20Staying%20in%20a%20Grid/README_EN.md) | `String`,`Simulation` | Medium | | +| [2121](https://leetcode.com/problems/intervals-between-identical-elements) | [Intervals Between Identical Elements](/solution/2100-2199/2121.Intervals%20Between%20Identical%20Elements/README_EN.md) | `Array`,`Hash Table`,`Prefix Sum` | Medium | | +| [2122](https://leetcode.com/problems/recover-the-original-array) | [Recover the Original Array](/solution/2100-2199/2122.Recover%20the%20Original%20Array/README_EN.md) | `Array`,`Hash Table`,`Enumeration`,`Sorting` | Hard | | +| [2123](https://leetcode.com/problems/minimum-operations-to-remove-adjacent-ones-in-matrix) | [Minimum Operations to Remove Adjacent Ones in Matrix](/solution/2100-2199/2123.Minimum%20Operations%20to%20Remove%20Adjacent%20Ones%20in%20Matrix/README_EN.md) | | Hard | 🔒 | ## Copyright diff --git a/solution/readme_template.md b/solution/readme_template.md index 77254a03c1a96..aeb39962c4915 100644 --- a/solution/readme_template.md +++ b/solution/readme_template.md @@ -4,7 +4,7 @@ ## 题解 -以下所有题目均来源 [LeetCode 中国官网](https://leetcode-cn.com/problemset/all),题解由 [doocs/leetcode 贡献者](https://github.com/doocs/leetcode/graphs/contributors) 提供,正在完善中,欢迎贡献你的题解! +列表所有题解均由 [开源社区 Doocs](https://github.com/doocs) 贡献者提供,正在完善中,欢迎贡献你的题解! 快速搜索题号、题解、标签等,请善用 Control+F(或者 Command+F)。 diff --git a/solution/summary.md b/solution/summary.md index 9ffdcb780f8de..1c0a9a648e548 100644 --- a/solution/summary.md +++ b/solution/summary.md @@ -2165,3 +2165,4 @@ - [2120.Execution of All Suffix Instructions Staying in a Grid](/solution/2100-2199/2120.Execution%20of%20All%20Suffix%20Instructions%20Staying%20in%20a%20Grid/README.md) - [2121.Intervals Between Identical Elements](/solution/2100-2199/2121.Intervals%20Between%20Identical%20Elements/README.md) - [2122.Recover the Original Array](/solution/2100-2199/2122.Recover%20the%20Original%20Array/README.md) + - [2123.Minimum Operations to Remove Adjacent Ones in Matrix](/solution/2100-2199/2123.Minimum%20Operations%20to%20Remove%20Adjacent%20Ones%20in%20Matrix/README.md) diff --git a/solution/summary_en.md b/solution/summary_en.md index a7d4c56f51d95..593689ab8882c 100644 --- a/solution/summary_en.md +++ b/solution/summary_en.md @@ -2165,3 +2165,4 @@ - [2120.Execution of All Suffix Instructions Staying in a Grid](/solution/2100-2199/2120.Execution%20of%20All%20Suffix%20Instructions%20Staying%20in%20a%20Grid/README_EN.md) - [2121.Intervals Between Identical Elements](/solution/2100-2199/2121.Intervals%20Between%20Identical%20Elements/README_EN.md) - [2122.Recover the Original Array](/solution/2100-2199/2122.Recover%20the%20Original%20Array/README_EN.md) + - [2123.Minimum Operations to Remove Adjacent Ones in Matrix](/solution/2100-2199/2123.Minimum%20Operations%20to%20Remove%20Adjacent%20Ones%20in%20Matrix/README_EN.md)