Skip to content

Commit f81a32d

Browse files
authored
chore: update lc problems (doocs#1518)
1 parent 240c757 commit f81a32d

File tree

16 files changed

+285
-106
lines changed

16 files changed

+285
-106
lines changed

solution/0000-0099/0056.Merge Intervals/README.md

+96-18
Original file line numberDiff line numberDiff line change
@@ -39,28 +39,18 @@
3939

4040
<!-- 这里可写通用的实现逻辑 -->
4141

42-
**方法一:区间合并**
43-
44-
这道题是一道典型的区间合并问题,即给定一些区间,要求将所有有交集的区间合并成一个区间。
42+
**方法一:排序 + 一次遍历**
4543

4644
我们可以将区间按照左端点升序排列,然后遍历区间进行合并操作。
4745

48-
模板如下:
46+
具体的合并操作如下。
4947

50-
```python
51-
def merge(intervals):
52-
ans = []
53-
intervals.sort()
54-
st, ed = intervals[0]
55-
for s, e in intervals[1:]:
56-
if ed < s:
57-
ans.append([st, ed])
58-
st, ed = s, e
59-
else:
60-
ed = max(ed, e)
61-
ans.append([st, ed])
62-
return ans
63-
```
48+
我们先将第一个区间加入答案,然后依次考虑之后的每个区间:
49+
50+
- 如果答案数组中最后一个区间的右端点小于当前考虑区间的左端点,说明两个区间不会重合,因此我们可以直接将当前区间加入答案数组末尾;
51+
- 否则,说明两个区间重合,我们需要用当前区间的右端点更新答案数组中最后一个区间的右端点,将其置为二者的较大值。
52+
53+
最后,我们返回答案数组即可。
6454

6555
时间复杂度 $O(n \times \log n)$,空间复杂度 $O(\log n)$。其中 $n$ 为区间个数。
6656

@@ -86,6 +76,19 @@ class Solution:
8676
return ans
8777
```
8878

79+
```python
80+
class Solution:
81+
def merge(self, intervals: List[List[int]]) -> List[List[int]]:
82+
intervals.sort()
83+
ans = [intervals[0]]
84+
for s, e in intervals[1:]:
85+
if ans[-1][1] < s:
86+
ans.append([s, e])
87+
else:
88+
ans[-1][1] = max(ans[-1][1], e)
89+
return ans
90+
```
91+
8992
### **Java**
9093

9194
<!-- 这里可写当前语言的特殊实现逻辑 -->
@@ -112,6 +115,25 @@ class Solution {
112115
}
113116
```
114117

118+
```java
119+
class Solution {
120+
public int[][] merge(int[][] intervals) {
121+
Arrays.sort(intervals, (a, b) -> a[0] - b[0]);
122+
List<int[]> ans = new ArrayList<>();
123+
ans.add(intervals[0]);
124+
for (int i = 1; i < intervals.length; ++i) {
125+
int s = intervals[i][0], e = intervals[i][1];
126+
if (ans.get(ans.size() - 1)[1] < s) {
127+
ans.add(intervals[i]);
128+
} else {
129+
ans.get(ans.size() - 1)[1] = Math.max(ans.get(ans.size() - 1)[1], e);
130+
}
131+
}
132+
return ans.toArray(new int[ans.size()][]);
133+
}
134+
}
135+
```
136+
115137
### **C++**
116138

117139
```cpp
@@ -136,6 +158,25 @@ public:
136158
};
137159
```
138160
161+
```cpp
162+
class Solution {
163+
public:
164+
vector<vector<int>> merge(vector<vector<int>>& intervals) {
165+
sort(intervals.begin(), intervals.end());
166+
vector<vector<int>> ans;
167+
ans.emplace_back(intervals[0]);
168+
for (int i = 1; i < intervals.size(); ++i) {
169+
if (ans.back()[1] < intervals[i][0]) {
170+
ans.emplace_back(intervals[i]);
171+
} else {
172+
ans.back()[1] = max(ans.back()[1], intervals[i][1]);
173+
}
174+
}
175+
return ans;
176+
}
177+
};
178+
```
179+
139180
### **Go**
140181

141182
```go
@@ -157,6 +198,28 @@ func merge(intervals [][]int) (ans [][]int) {
157198
}
158199
```
159200

201+
```go
202+
func merge(intervals [][]int) (ans [][]int) {
203+
sort.Slice(intervals, func(i, j int) bool { return intervals[i][0] < intervals[j][0] })
204+
ans = append(ans, intervals[0])
205+
for _, e := range intervals[1:] {
206+
if ans[len(ans)-1][1] < e[0] {
207+
ans = append(ans, e)
208+
} else {
209+
ans[len(ans)-1][1] = max(ans[len(ans)-1][1], e[1])
210+
}
211+
}
212+
return
213+
}
214+
215+
func max(a, b int) int {
216+
if a > b {
217+
return a
218+
}
219+
return b
220+
}
221+
```
222+
160223
### **C#**
161224

162225
```cs
@@ -200,6 +263,21 @@ function merge(intervals: number[][]): number[][] {
200263
}
201264
```
202265

266+
```ts
267+
function merge(intervals: number[][]): number[][] {
268+
intervals.sort((a, b) => a[0] - b[0]);
269+
const ans: number[][] = [intervals[0]];
270+
for (let i = 1; i < intervals.length; ++i) {
271+
if (ans.at(-1)[1] < intervals[i][0]) {
272+
ans.push(intervals[i]);
273+
} else {
274+
ans.at(-1)[1] = Math.max(ans.at(-1)[1], intervals[i][1]);
275+
}
276+
}
277+
return ans;
278+
}
279+
```
280+
203281
```ts
204282
function merge(intervals: number[][]): number[][] {
205283
intervals.sort((a, b) => a[0] - b[0]);

solution/0000-0099/0056.Merge Intervals/README_EN.md

+88
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,19 @@ class Solution:
5454
return ans
5555
```
5656

57+
```python
58+
class Solution:
59+
def merge(self, intervals: List[List[int]]) -> List[List[int]]:
60+
intervals.sort()
61+
ans = [intervals[0]]
62+
for s, e in intervals[1:]:
63+
if ans[-1][1] < s:
64+
ans.append([s, e])
65+
else:
66+
ans[-1][1] = max(ans[-1][1], e)
67+
return ans
68+
```
69+
5770
### **Java**
5871

5972
```java
@@ -78,6 +91,25 @@ class Solution {
7891
}
7992
```
8093

94+
```java
95+
class Solution {
96+
public int[][] merge(int[][] intervals) {
97+
Arrays.sort(intervals, (a, b) -> a[0] - b[0]);
98+
List<int[]> ans = new ArrayList<>();
99+
ans.add(intervals[0]);
100+
for (int i = 1; i < intervals.length; ++i) {
101+
int s = intervals[i][0], e = intervals[i][1];
102+
if (ans.get(ans.size() - 1)[1] < s) {
103+
ans.add(intervals[i]);
104+
} else {
105+
ans.get(ans.size() - 1)[1] = Math.max(ans.get(ans.size() - 1)[1], e);
106+
}
107+
}
108+
return ans.toArray(new int[ans.size()][]);
109+
}
110+
}
111+
```
112+
81113
### **C++**
82114

83115
```cpp
@@ -102,6 +134,25 @@ public:
102134
};
103135
```
104136
137+
```cpp
138+
class Solution {
139+
public:
140+
vector<vector<int>> merge(vector<vector<int>>& intervals) {
141+
sort(intervals.begin(), intervals.end());
142+
vector<vector<int>> ans;
143+
ans.emplace_back(intervals[0]);
144+
for (int i = 1; i < intervals.size(); ++i) {
145+
if (ans.back()[1] < intervals[i][0]) {
146+
ans.emplace_back(intervals[i]);
147+
} else {
148+
ans.back()[1] = max(ans.back()[1], intervals[i][1]);
149+
}
150+
}
151+
return ans;
152+
}
153+
};
154+
```
155+
105156
### **Go**
106157

107158
```go
@@ -123,6 +174,28 @@ func merge(intervals [][]int) (ans [][]int) {
123174
}
124175
```
125176

177+
```go
178+
func merge(intervals [][]int) (ans [][]int) {
179+
sort.Slice(intervals, func(i, j int) bool { return intervals[i][0] < intervals[j][0] })
180+
ans = append(ans, intervals[0])
181+
for _, e := range intervals[1:] {
182+
if ans[len(ans)-1][1] < e[0] {
183+
ans = append(ans, e)
184+
} else {
185+
ans[len(ans)-1][1] = max(ans[len(ans)-1][1], e[1])
186+
}
187+
}
188+
return
189+
}
190+
191+
func max(a, b int) int {
192+
if a > b {
193+
return a
194+
}
195+
return b
196+
}
197+
```
198+
126199
### **C#**
127200

128201
```cs
@@ -166,6 +239,21 @@ function merge(intervals: number[][]): number[][] {
166239
}
167240
```
168241

242+
```ts
243+
function merge(intervals: number[][]): number[][] {
244+
intervals.sort((a, b) => a[0] - b[0]);
245+
const ans: number[][] = [intervals[0]];
246+
for (let i = 1; i < intervals.length; ++i) {
247+
if (ans.at(-1)[1] < intervals[i][0]) {
248+
ans.push(intervals[i]);
249+
} else {
250+
ans.at(-1)[1] = Math.max(ans.at(-1)[1], intervals[i][1]);
251+
}
252+
}
253+
return ans;
254+
}
255+
```
256+
169257
```ts
170258
function merge(intervals: number[][]): number[][] {
171259
intervals.sort((a, b) => a[0] - b[0]);

solution/0400-0499/0401.Binary Watch/README.md

+5-7
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,10 @@
99
<p>二进制手表顶部有 4 个 LED 代表<strong> 小时(0-11)</strong>,底部的 6 个 LED 代表<strong> 分钟(0-59)</strong>。每个 LED 代表一个 0 或 1,最低位在右侧。</p>
1010

1111
<ul>
12-
<li>例如,下面的二进制手表读取 <code>"3:25"</code> 。</li>
12+
<li>例如,下面的二进制手表读取 <code>"4:51"</code> 。</li>
1313
</ul>
1414

15-
<p><img src="https://fastly.jsdelivr.net/gh/doocs/leetcode@main/solution/0400-0499/0401.Binary%20Watch/images/binary_clock_samui_moon.jpg" style="height: 300px; width" /></p>
16-
17-
<p><small><em>(图源:<a href="https://commons.m.wikimedia.org/wiki/File:Binary_clock_samui_moon.jpg">WikiMedia - Binary clock samui moon.jpg</a> ,许可协议:<a href="https://creativecommons.org/licenses/by-sa/3.0/deed.en">Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0)</a> )</em></small></p>
15+
<p><img src="https://fastly.jsdelivr.net/gh/doocs/leetcode@main/solution/0400-0499/0401.Binary%20Watch/images/binarywatch.jpg" style="height: 300px; width" /></p>
1816

1917
<p>给你一个整数 <code>turnedOn</code> ,表示当前亮着的 LED 的数量,返回二进制手表可以表示的所有可能时间。你可以 <strong>按任意顺序</strong> 返回答案。</p>
2018

@@ -30,7 +28,7 @@
3028
<li>例如,<code>"10:2"</code> 是无效的时间,正确的写法应该是 <code>"10:02"</code> 。</li>
3129
</ul>
3230

33-
<p> </p>
31+
<p>&nbsp;</p>
3432

3533
<p><strong>示例 1:</strong></p>
3634

@@ -46,12 +44,12 @@
4644
<strong>输出:</strong>[]
4745
</pre>
4846

49-
<p> </p>
47+
<p>&nbsp;</p>
5048

5149
<p><strong>提示:</strong></p>
5250

5351
<ul>
54-
<li><code>0 <= turnedOn <= 10</code></li>
52+
<li><code>0 &lt;= turnedOn &lt;= 10</code></li>
5553
</ul>
5654

5755
## 解法

solution/0800-0899/0828.Count Unique Characters of All Substrings of a Given String/README.md

+4-4
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
<p>&nbsp;</p>
1818

19-
<p><strong>示例 1:</strong></p>
19+
<p><strong class="example">示例 1:</strong></p>
2020

2121
<pre>
2222
<strong>输入: </strong>s = "ABC"
@@ -26,15 +26,15 @@
2626
所以其长度总和为:1 + 1 + 1 + 2 + 2 + 3 = 10
2727
</pre>
2828

29-
<p><strong>示例 2:</strong></p>
29+
<p><strong class="example">示例 2:</strong></p>
3030

3131
<pre>
3232
<strong>输入: </strong>s = "ABA"
3333
<strong>输出: </strong>8
3434
<strong>解释: </strong>除<code>了 countUniqueChars</code>("ABA") = 1 之外,其余与示例 1 相同。
3535
</pre>
3636

37-
<p><strong>示例 3:</strong></p>
37+
<p><strong class="example">示例 3:</strong></p>
3838

3939
<pre>
4040
<strong>输入:</strong>s = "LEETCODE"
@@ -46,7 +46,7 @@
4646
<p><strong>提示:</strong></p>
4747

4848
<ul>
49-
<li><code>1 &lt;= s.length &lt;= 10^5</code></li>
49+
<li><code>1 &lt;= s.length &lt;= 10<sup>5</sup></code></li>
5050
<li><code>s</code> 只包含大写英文字符</li>
5151
</ul>
5252

0 commit comments

Comments
 (0)