Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit ca22a43

Browse files
feat: add new lc problems and solutions (#1569)
* No.2839.Check if Strings Can be Made Equal With Operations I * No.2840.Check if Strings Can be Made Equal With Operations II * No.2841.Maximum Sum of Almost Unique Subarray * No.2842.Count K-Subsequences of a String With Maximum Beauty * No.2843.Count Symmetric Integers * No.2844.Minimum Operations to Make a Special Number * No.2845.Count of Interesting Subarrays * No.2846.Minimum Edge Weight Equilibrium Queries in a Tree
1 parent a83edac commit ca22a43

File tree

60 files changed

+3931
-61
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

60 files changed

+3931
-61
lines changed

‎solution/1900-1999/1921.Eliminate Maximum Number of Monsters/README.md‎

Lines changed: 30 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -68,15 +68,17 @@
6868

6969
**方法一:排序 + 贪心**
7070

71-
$times$ 数组记录每个怪物最晚可被消灭的时间。对于第 $i$ 个怪物,最晚可被消灭的时间满足:
71+
我们用 $times$ 数组记录每个怪物最晚可被消灭的时间。对于第 $i$ 个怪物,最晚可被消灭的时间满足:
7272

7373
$$times[i] = \lfloor \frac{dist[i]-1}{speed[i]} \rfloor$$
7474

75-
我们对 $times$ 数组升序排列,然后遍历 $times$ 数组。对于第 $i$ 个怪物,如果 $times[i] \geq i,ドル说明第 $i$ 个怪物可以被消灭,否则说明第 $i$ 个怪物无法被消灭,直接返回 $i$ 即可。
75+
接下来,我们对 $times$ 数组升序排列。
76+
77+
然后遍历 $times$ 数组,对于第 $i$ 个怪物,如果 $times[i] \geq i,ドル说明第 $i$ 个怪物可以被消灭,否则说明第 $i$ 个怪物无法被消灭,直接返回 $i$ 即可。
7678

7779
若所有怪物都可以被消灭,则返回 $n$。
7880

79-
时间复杂度 $O(nlogn)$
81+
时间复杂度 $O(n \times \log n),ドル空间复杂度 $O(n)$。其中 $n$ 是数组的长度
8082

8183
<!-- tabs:start -->
8284

@@ -87,12 +89,11 @@ $$times[i] = \lfloor \frac{dist[i]-1}{speed[i]} \rfloor$$
8789
```python
8890
class Solution:
8991
def eliminateMaximum(self, dist: List[int], speed: List[int]) -> int:
90-
times = [(d - 1) // s for d, s in zip(dist, speed)]
91-
times.sort()
92+
times = sorted((d - 1) // s for d, s in zip(dist, speed))
9293
for i, t in enumerate(times):
9394
if t < i:
9495
return i
95-
return len(dist)
96+
return len(times)
9697
```
9798

9899
### **Java**
@@ -118,29 +119,6 @@ class Solution {
118119
}
119120
```
120121

121-
### **JavaScript**
122-
123-
```js
124-
/**
125-
* @param {number[]} dist
126-
* @param {number[]} speed
127-
* @return {number}
128-
*/
129-
var eliminateMaximum = function (dist, speed) {
130-
let arr = [];
131-
for (let i = 0; i < dist.length; i++) {
132-
arr[i] = dist[i] / speed[i];
133-
}
134-
arr.sort((a, b) => a - b);
135-
let ans = 0;
136-
while (arr[0] > ans) {
137-
arr.shift();
138-
++ans;
139-
}
140-
return ans;
141-
};
142-
```
143-
144122
### **C++**
145123

146124
```cpp
@@ -201,6 +179,29 @@ function eliminateMaximum(dist: number[], speed: number[]): number {
201179
}
202180
```
203181

182+
### **JavaScript**
183+
184+
```js
185+
/**
186+
* @param {number[]} dist
187+
* @param {number[]} speed
188+
* @return {number}
189+
*/
190+
var eliminateMaximum = function (dist, speed) {
191+
let arr = [];
192+
for (let i = 0; i < dist.length; i++) {
193+
arr[i] = dist[i] / speed[i];
194+
}
195+
arr.sort((a, b) => a - b);
196+
let ans = 0;
197+
while (arr[0] > ans) {
198+
arr.shift();
199+
++ans;
200+
}
201+
return ans;
202+
};
203+
```
204+
204205
### **...**
205206

206207
```

‎solution/1900-1999/1921.Eliminate Maximum Number of Monsters/README_EN.md‎

Lines changed: 25 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -66,12 +66,11 @@ You can only eliminate 1 monster.
6666
```python
6767
class Solution:
6868
def eliminateMaximum(self, dist: List[int], speed: List[int]) -> int:
69-
times = [(d - 1) // s for d, s in zip(dist, speed)]
70-
times.sort()
69+
times = sorted((d - 1) // s for d, s in zip(dist, speed))
7170
for i, t in enumerate(times):
7271
if t < i:
7372
return i
74-
return len(dist)
73+
return len(times)
7574
```
7675

7776
### **Java**
@@ -95,29 +94,6 @@ class Solution {
9594
}
9695
```
9796

98-
### **JavaScript**
99-
100-
```js
101-
/**
102-
* @param {number[]} dist
103-
* @param {number[]} speed
104-
* @return {number}
105-
*/
106-
var eliminateMaximum = function (dist, speed) {
107-
let arr = [];
108-
for (let i = 0; i < dist.length; i++) {
109-
arr[i] = dist[i] / speed[i];
110-
}
111-
arr.sort((a, b) => a - b);
112-
let ans = 0;
113-
while (arr[0] > ans) {
114-
arr.shift();
115-
++ans;
116-
}
117-
return ans;
118-
};
119-
```
120-
12197
### **C++**
12298

12399
```cpp
@@ -178,6 +154,29 @@ function eliminateMaximum(dist: number[], speed: number[]): number {
178154
}
179155
```
180156

157+
### **JavaScript**
158+
159+
```js
160+
/**
161+
* @param {number[]} dist
162+
* @param {number[]} speed
163+
* @return {number}
164+
*/
165+
var eliminateMaximum = function (dist, speed) {
166+
let arr = [];
167+
for (let i = 0; i < dist.length; i++) {
168+
arr[i] = dist[i] / speed[i];
169+
}
170+
arr.sort((a, b) => a - b);
171+
let ans = 0;
172+
while (arr[0] > ans) {
173+
arr.shift();
174+
++ans;
175+
}
176+
return ans;
177+
};
178+
```
179+
181180
### **...**
182181

183182
```
Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
class Solution:
22
def eliminateMaximum(self, dist: List[int], speed: List[int]) -> int:
3-
n = len(dist)
4-
times = [(dist[i] - 1) // speed[i] for i in range(n)]
5-
times.sort()
6-
for i in range(n):
7-
if times[i] < i:
3+
times = sorted((d - 1) // s for d, s in zip(dist, speed))
4+
for i, t in enumerate(times):
5+
if t < i:
86
return i
9-
return n
7+
return len(times)
Lines changed: 151 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,151 @@
1+
# [2839. 判断通过操作能否让字符串相等 I](https://leetcode.cn/problems/check-if-strings-can-be-made-equal-with-operations-i)
2+
3+
[English Version](/solution/2800-2899/2839.Check%20if%20Strings%20Can%20be%20Made%20Equal%20With%20Operations%20I/README_EN.md)
4+
5+
## 题目描述
6+
7+
<!-- 这里写题目描述 -->
8+
9+
<p>给你两个字符串&nbsp;<code>s1</code> 和&nbsp;<code>s2</code>&nbsp;,两个字符串的长度都为&nbsp;<code>4</code>&nbsp;,且只包含 <strong>小写</strong> 英文字母。</p>
10+
11+
<p>你可以对两个字符串中的 <strong>任意一个</strong>&nbsp;执行以下操作 <strong>任意</strong>&nbsp;次:</p>
12+
13+
<ul>
14+
<li>选择两个下标&nbsp;<code>i</code> 和&nbsp;<code>j</code>&nbsp;且满足&nbsp;<code>j - i = 2</code>&nbsp;,然后 <strong>交换</strong> 这个字符串中两个下标对应的字符。</li>
15+
</ul>
16+
17+
<p>如果你可以让字符串<em>&nbsp;</em><code>s1</code><em> </em>和<em>&nbsp;</em><code>s2</code>&nbsp;相等,那么返回 <code>true</code>&nbsp;,否则返回 <code>false</code>&nbsp;。</p>
18+
19+
<p>&nbsp;</p>
20+
21+
<p><strong class="example">示例 1:</strong></p>
22+
23+
<pre>
24+
<b>输入:</b>s1 = "abcd", s2 = "cdab"
25+
<b>输出:</b>true
26+
<strong>解释:</strong> 我们可以对 s1 执行以下操作:
27+
- 选择下标 i = 0 ,j = 2 ,得到字符串 s1 = "cbad" 。
28+
- 选择下标 i = 1 ,j = 3 ,得到字符串 s1 = "cdab" = s2 。
29+
</pre>
30+
31+
<p><strong class="example">示例 2:</strong></p>
32+
33+
<pre>
34+
<b>输入:</b>s1 = "abcd", s2 = "dacb"
35+
<b>输出:</b>false
36+
<b>解释:</b>无法让两个字符串相等。
37+
</pre>
38+
39+
<p>&nbsp;</p>
40+
41+
<p><strong>提示:</strong></p>
42+
43+
<ul>
44+
<li><code>s1.length == s2.length == 4</code></li>
45+
<li><code>s1</code> 和&nbsp;<code>s2</code>&nbsp;只包含小写英文字母。</li>
46+
</ul>
47+
48+
## 解法
49+
50+
<!-- 这里可写通用的实现逻辑 -->
51+
52+
<!-- tabs:start -->
53+
54+
### **Python3**
55+
56+
<!-- 这里可写当前语言的特殊实现逻辑 -->
57+
58+
```python
59+
class Solution:
60+
def canBeEqual(self, s1: str, s2: str) -> bool:
61+
return sorted(s1[::2]) == sorted(s2[::2]) and sorted(s1[1::2]) == sorted(
62+
s2[1::2]
63+
)
64+
```
65+
66+
### **Java**
67+
68+
<!-- 这里可写当前语言的特殊实现逻辑 -->
69+
70+
```java
71+
class Solution {
72+
public boolean canBeEqual(String s1, String s2) {
73+
int[][] cnt = new int[2][26];
74+
for (int i = 0; i < s1.length(); ++i) {
75+
++cnt[i & 1][s1.charAt(i) - 'a'];
76+
--cnt[i & 1][s2.charAt(i) - 'a'];
77+
}
78+
for (int i = 0; i < 26; ++i) {
79+
if (cnt[0][i] != 0 || cnt[1][i] != 0) {
80+
return false;
81+
}
82+
}
83+
return true;
84+
}
85+
}
86+
```
87+
88+
### **C++**
89+
90+
```cpp
91+
class Solution {
92+
public:
93+
bool canBeEqual(string s1, string s2) {
94+
vector<vector<int>> cnt(2, vector<int>(26, 0));
95+
for (int i = 0; i < s1.size(); ++i) {
96+
++cnt[i & 1][s1[i] - 'a'];
97+
--cnt[i & 1][s2[i] - 'a'];
98+
}
99+
for (int i = 0; i < 26; ++i) {
100+
if (cnt[0][i] || cnt[1][i]) {
101+
return false;
102+
}
103+
}
104+
return true;
105+
}
106+
};
107+
```
108+
109+
### **Go**
110+
111+
```go
112+
func canBeEqual(s1 string, s2 string) bool {
113+
cnt := [2][26]int{}
114+
for i := 0; i < len(s1); i++ {
115+
cnt[i&1][s1[i]-'a']++
116+
cnt[i&1][s2[i]-'a']--
117+
}
118+
for i := 0; i < 26; i++ {
119+
if cnt[0][i] != 0 || cnt[1][i] != 0 {
120+
return false
121+
}
122+
}
123+
return true
124+
}
125+
```
126+
127+
### **TypeScript**
128+
129+
```ts
130+
function canBeEqual(s1: string, s2: string): boolean {
131+
const cnt: number[][] = Array.from({ length: 2 }, () => Array.from({ length: 26 }, () => 0));
132+
for (let i = 0; i < s1.length; ++i) {
133+
++cnt[i & 1][s1.charCodeAt(i) - 97];
134+
--cnt[i & 1][s2.charCodeAt(i) - 97];
135+
}
136+
for (let i = 0; i < 26; ++i) {
137+
if (cnt[0][i] || cnt[1][i]) {
138+
return false;
139+
}
140+
}
141+
return true;
142+
}
143+
```
144+
145+
### **...**
146+
147+
```
148+
149+
```
150+
151+
<!-- tabs:end -->

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /