Skip to content

Commit 2d2b0a8

Browse files
committed
new year
1 parent e917ffa commit 2d2b0a8

File tree

3 files changed

+121
-3
lines changed

3 files changed

+121
-3
lines changed

readme.md

+8-3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
# 按日期打卡
2+
## 2021.01
3+
[[20210105]830. 较大分组的位置-Easy](字符串/830.%20较大分组的位置-Easy)
4+
[[20210104]1688. 比赛中的配对次数-Easy](回溯法/1688.%20比赛中的配对次数-Easy.md)
25
## 2020.12
36
[[20201201]34. 在排序数组中查找元素的第一个和最后一个位置-Medium](数组/34.%20在排序数组中查找元素的第一个和最后一个位置-Medium.md)
47
[[20201202]292. Nim 游戏-Easy](动态规划/292.%20Nim%20游戏-Easy.md)
@@ -103,6 +106,7 @@
103106
[148. 排序链表-Medium](链表/148.%20排序链表-Medium.md)
104107
## 字符串
105108
[290. 单词规律-Easy](字符串/290.%20单词规律-Easy.md)
109+
[830. 较大分组的位置-Easy](字符串/830.%20较大分组的位置-Easy)
106110
[844. 比较含退格的字符串-Easy](字符串/844.%20比较含退格的字符串-Easy.md)
107111

108112
## 动态规划
@@ -142,11 +146,12 @@
142146
[剑指 Offer 47. 礼物的最大价值](动态规划/剑指%20Offer%2047.%20礼物的最大价值.md)
143147

144148

145-
146-
147149
## 贪心
148150
[134. 加油站-Medium](贪心/134.%20加油站-Medium.md)
149151
[763. 划分字母区间-Medium](贪心/763.%20划分字母区间-Medium.md)
150152
[860. 柠檬水找零-Easy](贪心/860.%20柠檬水找零-Easy.md)
151153
[976. 三角形的最大周长-Easy](贪心/976.%20三角形的最大周长-Easy.md)
152-
[1402. 做菜顺序-Hard](贪心/1402.%20做菜顺序-Hard.md)
154+
[1402. 做菜顺序-Hard](贪心/1402.%20做菜顺序-Hard.md)
155+
156+
## 回溯法
157+
[1688. 比赛中的配对次数-Easy](回溯法/1688.%20比赛中的配对次数-Easy.md)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
# [Description](https://leetcode-cn.com/problems/count-of-matches-in-tournament)
2+
给你一个整数 n ,表示比赛中的队伍数。比赛遵循一种独特的赛制:
3+
4+
如果当前队伍数是 偶数 ,那么每支队伍都会与另一支队伍配对。总共进行 n / 2 场比赛,且产生 n / 2 支队伍进入下一轮。
5+
如果当前队伍数为 奇数 ,那么将会随机轮空并晋级一支队伍,其余的队伍配对。总共进行 (n - 1) / 2 场比赛,且产生 (n - 1) / 2 + 1 支队伍进入下一轮。
6+
返回在比赛中进行的配对次数,直到决出获胜队伍为止。
7+
8+
 
9+
10+
示例 1:
11+
```python
12+
输入:n = 7
13+
输出:6
14+
解释:比赛详情:
15+
-1 轮:队伍数 = 7 ,配对次数 = 34 支队伍晋级。
16+
-2 轮:队伍数 = 4 ,配对次数 = 22 支队伍晋级。
17+
-3 轮:队伍数 = 2 ,配对次数 = 1 ,决出 1 支获胜队伍。
18+
总配对次数 = 3 + 2 + 1 = 6
19+
```
20+
示例 2:
21+
```python
22+
输入:n = 14
23+
输出:13
24+
解释:比赛详情:
25+
-1 轮:队伍数 = 14 ,配对次数 = 77 支队伍晋级。
26+
-2 轮:队伍数 = 7 ,配对次数 = 34 支队伍晋级。
27+
-3 轮:队伍数 = 4 ,配对次数 = 22 支队伍晋级。
28+
-4 轮:队伍数 = 2 ,配对次数 = 1 ,决出 1 支获胜队伍。
29+
总配对次数 = 7 + 3 + 2 + 1 = 13
30+
```
31+
32+
提示:
33+
34+
- ```1 <= n <= 200```
35+
36+
37+
38+
# Solution
39+
- 回溯法解决
40+
- 时间复杂度:$O(logn)$
41+
- 空间复杂度:$O(1)$
42+
```python
43+
class Solution:
44+
def numberOfMatches(self, n: int) -> int:
45+
if n > 1:
46+
if n % 2 == 1:
47+
return self.numberOfMatches((n-1)//2+1) + (n-1)//2
48+
else:
49+
return self.numberOfMatches(n//2) + n//2
50+
else:
51+
return 0
52+
```
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
# [Description](https://leetcode-cn.com/problems/positions-of-large-groups)
2+
在一个由小写字母构成的字符串 s 中,包含由一些连续的相同字符所构成的分组。
3+
4+
例如,在字符串 s = "abbxxxxzyy" 中,就含有 "a", "bb", "xxxx", "z" 和 "yy" 这样的一些分组。
5+
6+
分组可以用区间 [start, end] 表示,其中 start 和 end 分别表示该分组的起始和终止位置的下标。上例中的 "xxxx" 分组用区间表示为 [3,6]
7+
8+
我们称所有包含大于或等于三个连续字符的分组为 较大分组 。
9+
10+
找到每一个 较大分组 的区间,按起始位置下标递增顺序排序后,返回结果。
11+
12+
 
13+
14+
示例 1:
15+
```python
16+
输入:s = "abbxxxxzzy"
17+
输出:[[3,6]]
18+
解释:"xxxx" 是一个起始于 3 且终止于 6 的较大分组。
19+
```
20+
示例 2:
21+
```python
22+
输入:s = "abc"
23+
输出:[]
24+
解释:"a","b""c" 均不是符合要求的较大分组。
25+
```
26+
示例 3:
27+
```python
28+
输入:s = "abcdddeeeeaabbbcd"
29+
输出:[[3,5],[6,9],[12,14]]
30+
解释:较大分组为 "ddd", "eeee""bbb"
31+
```
32+
示例 4:
33+
```python
34+
输入:s = "aba"
35+
输出:[]
36+
```
37+
提示:
38+
- 1 <= s.length <= 1000
39+
- s 仅含小写英文字母
40+
41+
42+
# Solution
43+
- 时间复杂度:$O(n)$
44+
- 空间复杂度:$O(1)$
45+
46+
```python
47+
class Solution:
48+
def largeGroupPositions(self, s: str) -> List[List[int]]:
49+
ret = list()
50+
n, num = len(s), 1
51+
52+
for i in range(n):
53+
if i == n - 1 or s[i] != s[i + 1]:
54+
if num >= 3:
55+
ret.append([i - num + 1, i])
56+
num = 1
57+
else:
58+
num += 1
59+
60+
return ret
61+
```

0 commit comments

Comments
 (0)