Skip to content

Commit 34d8329

Browse files
committed
feat: add solutions to lc problems
* No.2379.Minimum Recolors to Get K Consecutive Black Blocks * No.2379.Minimum Recolors to Get K Consecutive Black Blocks * No.2384.Largest Palindromic Number * No.2385.Amount of Time for Binary Tree to Be Infected
1 parent f03c190 commit 34d8329

File tree

10 files changed

+90
-76
lines changed

10 files changed

+90
-76
lines changed

solution/2300-2399/2334.Subarray With Elements Greater Than Varying Threshold/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ $v$ 作为当前连通块的最小值,当前连通块的大小为 $size[find(i
6666

6767
利用单调栈,得到以当前元素 $nums[i]$ 作为最小元素的左右边界 $left[i]$(左边第一个比 $nums[i]$ 小的元素的位置), $right[i]$(右边第一个比 $nums[i]$ 小的元素的位置)。
6868

69-
那么对于当前元素 $nums[i]$,$k=right[i]-left[i]-1$,若 $nums[i]>\frac{\text{threshold}}{k}$,说明找到了满足条件的子数组,返回 $true$。
69+
那么对于当前元素 $nums[i]$,$k=right[i]-left[i]-1$,若 $nums[i]>\frac{\text{threshold}}{k}$,说明找到了满足条件的子数组,返回 $true$。
7070

7171
否则遍历结束,返回 $-1$。
7272

solution/2300-2399/2379.Minimum Recolors to Get K Consecutive Black Blocks/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@
5757

5858
遍历 $blocks$,找出 $k$ 大小的窗口中的白色块个数的最小值。
5959

60-
时间复杂都 $O(n)$,空间复杂度 $O(1)$。
60+
时间复杂度 $O(n)$,空间复杂度 $O(1)$。
6161

6262
<!-- tabs:start -->
6363

solution/2300-2399/2383.Minimum Hours of Training to Win a Competition/README.md

Lines changed: 31 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,14 @@
5959

6060
<!-- 这里可写通用的实现逻辑 -->
6161

62+
**方法一:贪心 + 模拟**
63+
64+
对上对手时,需要满足经验和精力都严格超过对手,因此,我们遍历 $n$ 个对手,若经验或者精力不足以超过对手,则补到刚好能超过(每次训练,可以增加 $1$)。然后增加对应的经验值,减少对应的精力值。
65+
66+
遍历结束,返回训练的小时数。
67+
68+
时间复杂度 $O(n)$,空间复杂度 $O(1)$。其中 $n$ 是对手的数量。
69+
6270
<!-- tabs:start -->
6371

6472
### **Python3**
@@ -67,17 +75,21 @@
6775

6876
```python
6977
class Solution:
70-
def minNumberOfHours(self, initialEnergy: int, initialExperience: int, energy: List[int], experience: List[int]) -> int:
78+
def minNumberOfHours(
79+
self,
80+
initialEnergy: int,
81+
initialExperience: int,
82+
energy: List[int],
83+
experience: List[int],
84+
) -> int:
7185
ans = 0
7286
for a, b in zip(energy, experience):
7387
if initialEnergy <= a:
74-
t = a - initialEnergy + 1
75-
ans += t
76-
initialEnergy += t
88+
ans += a - initialEnergy + 1
89+
initialEnergy = a + 1
7790
if initialExperience <= b:
78-
t = b - initialExperience + 1
79-
ans += t
80-
initialExperience += t
91+
ans += b - initialExperience + 1
92+
initialExperience = b + 1
8193
initialEnergy -= a
8294
initialExperience += b
8395
return ans
@@ -94,14 +106,12 @@ class Solution {
94106
for (int i = 0; i < energy.length; ++i) {
95107
int a = energy[i], b = experience[i];
96108
if (initialEnergy <= a) {
97-
int t = a - initialEnergy + 1;
98-
ans += t;
99-
initialEnergy += t;
109+
ans += a - initialEnergy + 1;
110+
initialEnergy = a + 1;
100111
}
101112
if (initialExperience <= b) {
102-
int t = b - initialExperience + 1;
103-
ans += t;
104-
initialExperience += t;
113+
ans += b - initialExperience + 1;
114+
initialExperience = b + 1;
105115
}
106116
initialEnergy -= a;
107117
initialExperience += b;
@@ -121,14 +131,12 @@ public:
121131
for (int i = 0; i < energy.size(); ++i) {
122132
int a = energy[i], b = experience[i];
123133
if (initialEnergy <= a) {
124-
int t = a - initialEnergy + 1;
125-
ans += t;
126-
initialEnergy += t;
134+
ans += a - initialEnergy + 1;
135+
initialEnergy = a + 1;
127136
}
128137
if (initialExperience <= b) {
129-
int t = b - initialExperience + 1;
130-
ans += t;
131-
initialExperience += t;
138+
ans += b - initialExperience + 1;
139+
initialExperience = b + 1;
132140
}
133141
initialEnergy -= a;
134142
initialExperience += b;
@@ -146,14 +154,12 @@ func minNumberOfHours(initialEnergy int, initialExperience int, energy []int, ex
146154
for i, a := range energy {
147155
b := experience[i]
148156
if initialEnergy <= a {
149-
t := a - initialEnergy + 1
150-
ans += t
151-
initialEnergy += t
157+
ans += a - initialEnergy + 1
158+
initialEnergy = a + 1
152159
}
153160
if initialExperience <= b {
154-
t := b - initialExperience + 1
155-
ans += t
156-
initialExperience += t
161+
ans += b - initialExperience + 1
162+
initialExperience = b + 1
157163
}
158164
initialEnergy -= a
159165
initialExperience += b

solution/2300-2399/2383.Minimum Hours of Training to Win a Competition/README_EN.md

Lines changed: 23 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -61,17 +61,21 @@ It can be proven that no smaller answer exists.
6161

6262
```python
6363
class Solution:
64-
def minNumberOfHours(self, initialEnergy: int, initialExperience: int, energy: List[int], experience: List[int]) -> int:
64+
def minNumberOfHours(
65+
self,
66+
initialEnergy: int,
67+
initialExperience: int,
68+
energy: List[int],
69+
experience: List[int],
70+
) -> int:
6571
ans = 0
6672
for a, b in zip(energy, experience):
6773
if initialEnergy <= a:
68-
t = a - initialEnergy + 1
69-
ans += t
70-
initialEnergy += t
74+
ans += a - initialEnergy + 1
75+
initialEnergy = a + 1
7176
if initialExperience <= b:
72-
t = b - initialExperience + 1
73-
ans += t
74-
initialExperience += t
77+
ans += b - initialExperience + 1
78+
initialExperience = b + 1
7579
initialEnergy -= a
7680
initialExperience += b
7781
return ans
@@ -86,14 +90,12 @@ class Solution {
8690
for (int i = 0; i < energy.length; ++i) {
8791
int a = energy[i], b = experience[i];
8892
if (initialEnergy <= a) {
89-
int t = a - initialEnergy + 1;
90-
ans += t;
91-
initialEnergy += t;
93+
ans += a - initialEnergy + 1;
94+
initialEnergy = a + 1;
9295
}
9396
if (initialExperience <= b) {
94-
int t = b - initialExperience + 1;
95-
ans += t;
96-
initialExperience += t;
97+
ans += b - initialExperience + 1;
98+
initialExperience = b + 1;
9799
}
98100
initialEnergy -= a;
99101
initialExperience += b;
@@ -113,14 +115,12 @@ public:
113115
for (int i = 0; i < energy.size(); ++i) {
114116
int a = energy[i], b = experience[i];
115117
if (initialEnergy <= a) {
116-
int t = a - initialEnergy + 1;
117-
ans += t;
118-
initialEnergy += t;
118+
ans += a - initialEnergy + 1;
119+
initialEnergy = a + 1;
119120
}
120121
if (initialExperience <= b) {
121-
int t = b - initialExperience + 1;
122-
ans += t;
123-
initialExperience += t;
122+
ans += b - initialExperience + 1;
123+
initialExperience = b + 1;
124124
}
125125
initialEnergy -= a;
126126
initialExperience += b;
@@ -138,14 +138,12 @@ func minNumberOfHours(initialEnergy int, initialExperience int, energy []int, ex
138138
for i, a := range energy {
139139
b := experience[i]
140140
if initialEnergy <= a {
141-
t := a - initialEnergy + 1
142-
ans += t
143-
initialEnergy += t
141+
ans += a - initialEnergy + 1
142+
initialEnergy = a + 1
144143
}
145144
if initialExperience <= b {
146-
t := b - initialExperience + 1
147-
ans += t
148-
initialExperience += t
145+
ans += b - initialExperience + 1
146+
initialExperience = b + 1
149147
}
150148
initialEnergy -= a
151149
initialExperience += b

solution/2300-2399/2383.Minimum Hours of Training to Win a Competition/Solution.cpp

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,12 @@ class Solution {
55
for (int i = 0; i < energy.size(); ++i) {
66
int a = energy[i], b = experience[i];
77
if (initialEnergy <= a) {
8-
int t = a - initialEnergy + 1;
9-
ans += t;
10-
initialEnergy += t;
8+
ans += a - initialEnergy + 1;
9+
initialEnergy = a + 1;
1110
}
1211
if (initialExperience <= b) {
13-
int t = b - initialExperience + 1;
14-
ans += t;
15-
initialExperience += t;
12+
ans += b - initialExperience + 1;
13+
initialExperience = b + 1;
1614
}
1715
initialEnergy -= a;
1816
initialExperience += b;

solution/2300-2399/2383.Minimum Hours of Training to Win a Competition/Solution.go

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,12 @@ func minNumberOfHours(initialEnergy int, initialExperience int, energy []int, ex
33
for i, a := range energy {
44
b := experience[i]
55
if initialEnergy <= a {
6-
t := a - initialEnergy + 1
7-
ans += t
8-
initialEnergy += t
6+
ans += a - initialEnergy + 1
7+
initialEnergy = a + 1
98
}
109
if initialExperience <= b {
11-
t := b - initialExperience + 1
12-
ans += t
13-
initialExperience += t
10+
ans += b - initialExperience + 1
11+
initialExperience = b + 1
1412
}
1513
initialEnergy -= a
1614
initialExperience += b

solution/2300-2399/2383.Minimum Hours of Training to Win a Competition/Solution.java

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,12 @@ public int minNumberOfHours(int initialEnergy, int initialExperience, int[] ener
44
for (int i = 0; i < energy.length; ++i) {
55
int a = energy[i], b = experience[i];
66
if (initialEnergy <= a) {
7-
int t = a - initialEnergy + 1;
8-
ans += t;
9-
initialEnergy += t;
7+
ans += a - initialEnergy + 1;
8+
initialEnergy = a + 1;
109
}
1110
if (initialExperience <= b) {
12-
int t = b - initialExperience + 1;
13-
ans += t;
14-
initialExperience += t;
11+
ans += b - initialExperience + 1;
12+
initialExperience = b + 1;
1513
}
1614
initialEnergy -= a;
1715
initialExperience += b;

solution/2300-2399/2383.Minimum Hours of Training to Win a Competition/Solution.py

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,11 @@ def minNumberOfHours(
99
ans = 0
1010
for a, b in zip(energy, experience):
1111
if initialEnergy <= a:
12-
t = a - initialEnergy + 1
13-
ans += t
14-
initialEnergy += t
12+
ans += a - initialEnergy + 1
13+
initialEnergy = a + 1
1514
if initialExperience <= b:
16-
t = b - initialExperience + 1
17-
ans += t
18-
initialExperience += t
15+
ans += b - initialExperience + 1
16+
initialExperience = b + 1
1917
initialEnergy -= a
2018
initialExperience += b
2119
return ans

solution/2300-2399/2384.Largest Palindromic Number/README.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,18 @@
5252

5353
<!-- 这里可写通用的实现逻辑 -->
5454

55+
**方法一:统计 + 贪心**
56+
57+
用 $cnt$ 数组记录每个数字出现的次数。
58+
59+
回文数字需要满足回文串中最多有一个数字出现了奇数次,因此我们先找最大的、出现了奇数次的数字 $v$(也可能不存在),作为回文数字的中间数字,对应的 $cnt$ 减 $1$。
60+
61+
接下来我们从回文数字中间,按数字从小到大的顺序,往左右两边扩散(也可以枚举回文串的右半部分,然后将右半部分反转,得到左半部分)。这样我们可以得到一个“可能”含有前导零的回文串。
62+
63+
我们去除回文串的前导零,若回文串为空,则返回“0”。否则返回该回文串。
64+
65+
时间复杂度 $O(n)$。
66+
5567
<!-- tabs:start -->
5668

5769
### **Python3**

solution/2300-2399/2385.Amount of Time for Binary Tree to Be Infected/README.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,12 @@
5454

5555
<!-- 这里可写通用的实现逻辑 -->
5656

57+
**方法一:DFS + BFS**
58+
59+
先通过 $DFS$ 建图,得到 $g$。然后以 $start$ 作为起点,哈希表 $vis$ 标记访问过的节点,通过 $BFS$ 以及前面得到的图 $g$,逐层往外扩展,扩展的次数即为答案。
60+
61+
时间复杂度 $O(n)$,空间复杂度 $O(n)$。
62+
5763
<!-- tabs:start -->
5864

5965
### **Python3**

0 commit comments

Comments
 (0)