Skip to content

Commit 2aaf40e

Browse files
committed
feat: add solutions to lc problem: No.2100
No.2100.Find Good Days to Rob the Bank
1 parent 77b81ca commit 2aaf40e

File tree

22 files changed

+990
-2
lines changed

22 files changed

+990
-2
lines changed

solution/2100-2199/2100.Find Good Days to Rob the Bank/README.md

+96-1
Original file line numberDiff line numberDiff line change
@@ -74,22 +74,117 @@
7474

7575
<!-- 这里可写通用的实现逻辑 -->
7676

77+
left, right 分别记录左右符合要求的天数。
78+
7779
<!-- tabs:start -->
7880

7981
### **Python3**
8082

8183
<!-- 这里可写当前语言的特殊实现逻辑 -->
8284

8385
```python
84-
86+
class Solution:
87+
def goodDaysToRobBank(self, security: List[int], time: int) -> List[int]:
88+
n = len(security)
89+
if n <= time * 2:
90+
return []
91+
left, right = [0] * n, [0] * n
92+
for i in range(1, n):
93+
if security[i] <= security[i - 1]:
94+
left[i] = left[i - 1] + 1
95+
for i in range(n - 2, -1, -1):
96+
if security[i] <= security[i + 1]:
97+
right[i] = right[i + 1] + 1
98+
return [i for i in range(n) if time <= min(left[i], right[i])]
8599
```
86100

87101
### **Java**
88102

89103
<!-- 这里可写当前语言的特殊实现逻辑 -->
90104

91105
```java
106+
class Solution {
107+
public List<Integer> goodDaysToRobBank(int[] security, int time) {
108+
int n = security.length;
109+
if (n <= time * 2) {
110+
return Collections.emptyList();
111+
}
112+
int[] left = new int[n];
113+
int[] right = new int[n];
114+
for (int i = 1; i < n; ++i) {
115+
if (security[i] <= security[i - 1]) {
116+
left[i] = left[i - 1] + 1;
117+
}
118+
}
119+
for (int i = n - 2; i >= 0; --i) {
120+
if (security[i] <= security[i + 1]) {
121+
right[i] = right[i + 1] + 1;
122+
}
123+
}
124+
List<Integer> ans = new ArrayList<>();
125+
for (int i = 0; i < n; ++i) {
126+
if (time <= Math.min(left[i], right[i])) {
127+
ans.add(i);
128+
}
129+
}
130+
return ans;
131+
}
132+
}
133+
```
134+
135+
### **C++**
136+
137+
```cpp
138+
class Solution {
139+
public:
140+
vector<int> goodDaysToRobBank(vector<int>& security, int time) {
141+
int n = security.size();
142+
if (n <= time * 2) return {};
143+
vector<int> left(n);
144+
vector<int> right(n);
145+
for (int i = 1; i < n; ++i)
146+
if (security[i] <= security[i - 1])
147+
left[i] = left[i - 1] + 1;
148+
for (int i = n - 2; i >= 0; --i)
149+
if (security[i] <= security[i + 1])
150+
right[i] = right[i + 1] + 1;
151+
vector<int> ans;
152+
for (int i = 0; i < n; ++i)
153+
if (time <= min(left[i], right[i]))
154+
ans.push_back(i);
155+
return ans;
156+
}
157+
};
158+
```
92159
160+
### **Go**
161+
162+
```go
163+
func goodDaysToRobBank(security []int, time int) []int {
164+
n := len(security)
165+
if n <= time*2 {
166+
return []int{}
167+
}
168+
left := make([]int, n)
169+
right := make([]int, n)
170+
for i := 1; i < n; i++ {
171+
if security[i] <= security[i-1] {
172+
left[i] = left[i-1] + 1
173+
}
174+
}
175+
for i := n - 2; i >= 0; i-- {
176+
if security[i] <= security[i+1] {
177+
right[i] = right[i+1] + 1
178+
}
179+
}
180+
var ans []int
181+
for i := 0; i < n; i++ {
182+
if time <= left[i] && time <= right[i] {
183+
ans = append(ans, i)
184+
}
185+
}
186+
return ans
187+
}
93188
```
94189

95190
### **TypeScript**

solution/2100-2199/2100.Find Good Days to Rob the Bank/README_EN.md

+94-1
Original file line numberDiff line numberDiff line change
@@ -73,13 +73,106 @@ Thus, no day is a good day to rob the bank, so return an empty list.</pre>
7373
### **Python3**
7474

7575
```python
76-
76+
class Solution:
77+
def goodDaysToRobBank(self, security: List[int], time: int) -> List[int]:
78+
n = len(security)
79+
if n <= time * 2:
80+
return []
81+
left, right = [0] * n, [0] * n
82+
for i in range(1, n):
83+
if security[i] <= security[i - 1]:
84+
left[i] = left[i - 1] + 1
85+
for i in range(n - 2, -1, -1):
86+
if security[i] <= security[i + 1]:
87+
right[i] = right[i + 1] + 1
88+
return [i for i in range(n) if time <= min(left[i], right[i])]
7789
```
7890

7991
### **Java**
8092

8193
```java
94+
class Solution {
95+
public List<Integer> goodDaysToRobBank(int[] security, int time) {
96+
int n = security.length;
97+
if (n <= time * 2) {
98+
return Collections.emptyList();
99+
}
100+
int[] left = new int[n];
101+
int[] right = new int[n];
102+
for (int i = 1; i < n; ++i) {
103+
if (security[i] <= security[i - 1]) {
104+
left[i] = left[i - 1] + 1;
105+
}
106+
}
107+
for (int i = n - 2; i >= 0; --i) {
108+
if (security[i] <= security[i + 1]) {
109+
right[i] = right[i + 1] + 1;
110+
}
111+
}
112+
List<Integer> ans = new ArrayList<>();
113+
for (int i = 0; i < n; ++i) {
114+
if (time <= Math.min(left[i], right[i])) {
115+
ans.add(i);
116+
}
117+
}
118+
return ans;
119+
}
120+
}
121+
```
122+
123+
### **C++**
124+
125+
```cpp
126+
class Solution {
127+
public:
128+
vector<int> goodDaysToRobBank(vector<int>& security, int time) {
129+
int n = security.size();
130+
if (n <= time * 2) return {};
131+
vector<int> left(n);
132+
vector<int> right(n);
133+
for (int i = 1; i < n; ++i)
134+
if (security[i] <= security[i - 1])
135+
left[i] = left[i - 1] + 1;
136+
for (int i = n - 2; i >= 0; --i)
137+
if (security[i] <= security[i + 1])
138+
right[i] = right[i + 1] + 1;
139+
vector<int> ans;
140+
for (int i = 0; i < n; ++i)
141+
if (time <= min(left[i], right[i]))
142+
ans.push_back(i);
143+
return ans;
144+
}
145+
};
146+
```
82147
148+
### **Go**
149+
150+
```go
151+
func goodDaysToRobBank(security []int, time int) []int {
152+
n := len(security)
153+
if n <= time*2 {
154+
return []int{}
155+
}
156+
left := make([]int, n)
157+
right := make([]int, n)
158+
for i := 1; i < n; i++ {
159+
if security[i] <= security[i-1] {
160+
left[i] = left[i-1] + 1
161+
}
162+
}
163+
for i := n - 2; i >= 0; i-- {
164+
if security[i] <= security[i+1] {
165+
right[i] = right[i+1] + 1
166+
}
167+
}
168+
var ans []int
169+
for i := 0; i < n; i++ {
170+
if time <= left[i] && time <= right[i] {
171+
ans = append(ans, i)
172+
}
173+
}
174+
return ans
175+
}
83176
```
84177

85178
### **TypeScript**
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
class Solution {
2+
public:
3+
vector<int> goodDaysToRobBank(vector<int>& security, int time) {
4+
int n = security.size();
5+
if (n <= time * 2) return {};
6+
vector<int> left(n);
7+
vector<int> right(n);
8+
for (int i = 1; i < n; ++i)
9+
if (security[i] <= security[i - 1])
10+
left[i] = left[i - 1] + 1;
11+
for (int i = n - 2; i >= 0; --i)
12+
if (security[i] <= security[i + 1])
13+
right[i] = right[i + 1] + 1;
14+
vector<int> ans;
15+
for (int i = 0; i < n; ++i)
16+
if (time <= min(left[i], right[i]))
17+
ans.push_back(i);
18+
return ans;
19+
}
20+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
func goodDaysToRobBank(security []int, time int) []int {
2+
n := len(security)
3+
if n <= time*2 {
4+
return []int{}
5+
}
6+
left := make([]int, n)
7+
right := make([]int, n)
8+
for i := 1; i < n; i++ {
9+
if security[i] <= security[i-1] {
10+
left[i] = left[i-1] + 1
11+
}
12+
}
13+
for i := n - 2; i >= 0; i-- {
14+
if security[i] <= security[i+1] {
15+
right[i] = right[i+1] + 1
16+
}
17+
}
18+
var ans []int
19+
for i := 0; i < n; i++ {
20+
if time <= left[i] && time <= right[i] {
21+
ans = append(ans, i)
22+
}
23+
}
24+
return ans
25+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
class Solution {
2+
public List<Integer> goodDaysToRobBank(int[] security, int time) {
3+
int n = security.length;
4+
if (n <= time * 2) {
5+
return Collections.emptyList();
6+
}
7+
int[] left = new int[n];
8+
int[] right = new int[n];
9+
for (int i = 1; i < n; ++i) {
10+
if (security[i] <= security[i - 1]) {
11+
left[i] = left[i - 1] + 1;
12+
}
13+
}
14+
for (int i = n - 2; i >= 0; --i) {
15+
if (security[i] <= security[i + 1]) {
16+
right[i] = right[i + 1] + 1;
17+
}
18+
}
19+
List<Integer> ans = new ArrayList<>();
20+
for (int i = 0; i < n; ++i) {
21+
if (time <= Math.min(left[i], right[i])) {
22+
ans.add(i);
23+
}
24+
}
25+
return ans;
26+
}
27+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
class Solution:
2+
def goodDaysToRobBank(self, security: List[int], time: int) -> List[int]:
3+
n = len(security)
4+
if n <= time * 2:
5+
return []
6+
left, right = [0] * n, [0] * n
7+
for i in range(1, n):
8+
if security[i] <= security[i - 1]:
9+
left[i] = left[i - 1] + 1
10+
for i in range(n - 2, -1, -1):
11+
if security[i] <= security[i + 1]:
12+
right[i] = right[i + 1] + 1
13+
return [i for i in range(n) if time <= min(left[i], right[i])]

0 commit comments

Comments
 (0)