Skip to content

Commit 90d31c5

Browse files
committed
feat: add solutions to lc problem: No.1566
No.1566.Detect Pattern of Length M Repeated K or More Times
1 parent 69e4725 commit 90d31c5

File tree

7 files changed

+254
-11
lines changed

7 files changed

+254
-11
lines changed

solution/1500-1599/1566.Detect Pattern of Length M Repeated K or More Times/README.md

Lines changed: 97 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,22 +64,118 @@
6464

6565
<!-- 这里可写通用的实现逻辑 -->
6666

67+
**方法一:枚举**
68+
69+
枚举数组的左端点 `i`,判断是否存在一个 `i`,满足对于任意 `j∈[0, m * k)``arr[i + j] == arr[i + (j % m)]`。存在则返回 `true`,否则返回 `false`
70+
71+
时间复杂度 $O((n-m\times k)\times m \times k)$。
72+
6773
<!-- tabs:start -->
6874

6975
### **Python3**
7076

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

7379
```python
74-
80+
class Solution:
81+
def containsPattern(self, arr: List[int], m: int, k: int) -> bool:
82+
n = len(arr)
83+
for i in range(n - m * k + 1):
84+
j = 0
85+
while j < m * k:
86+
if arr[i + j] != arr[i + (j % m)]:
87+
break
88+
j += 1
89+
if j == m * k:
90+
return True
91+
return False
7592
```
7693

7794
### **Java**
7895

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

8198
```java
99+
class Solution {
100+
public boolean containsPattern(int[] arr, int m, int k) {
101+
int n = arr.length;
102+
for (int i = 0; i <= n - m * k; ++i) {
103+
int j = 0;
104+
for (; j < m * k; ++j) {
105+
if (arr[i + j] != arr[i + (j % m)]) {
106+
break;
107+
}
108+
}
109+
if (j == m * k) {
110+
return true;
111+
}
112+
}
113+
return false;
114+
}
115+
}
116+
```
117+
118+
### **C++**
119+
120+
```cpp
121+
class Solution {
122+
public:
123+
bool containsPattern(vector<int>& arr, int m, int k) {
124+
int n = arr.size();
125+
for (int i = 0; i <= n - m * k; ++i) {
126+
int j = 0;
127+
for (; j < m * k; ++j) {
128+
if (arr[i + j] != arr[i + (j % m)]) {
129+
break;
130+
}
131+
}
132+
if (j == m * k) {
133+
return true;
134+
}
135+
}
136+
return false;
137+
}
138+
};
139+
```
140+
141+
### **Go**
142+
143+
```go
144+
func containsPattern(arr []int, m int, k int) bool {
145+
n := len(arr)
146+
for i := 0; i <= n-m*k; i++ {
147+
j := 0
148+
for ; j < m*k; j++ {
149+
if arr[i+j] != arr[i+(j%m)] {
150+
break
151+
}
152+
}
153+
if j == m*k {
154+
return true
155+
}
156+
}
157+
return false
158+
}
159+
```
82160

161+
### **TypeScript**
162+
163+
```ts
164+
function containsPattern(arr: number[], m: number, k: number): boolean {
165+
const n = arr.length;
166+
for (let i = 0; i <= n - m * k; ++i) {
167+
let j = 0;
168+
for (; j < m * k; ++j) {
169+
if (arr[i + j] != arr[i + (j % m)]) {
170+
break;
171+
}
172+
}
173+
if (j == m * k) {
174+
return true;
175+
}
176+
}
177+
return false;
178+
}
83179
```
84180

85181
### **...**

solution/1500-1599/1566.Detect Pattern of Length M Repeated K or More Times/README_EN.md

Lines changed: 91 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,13 +52,103 @@
5252
### **Python3**
5353

5454
```python
55-
55+
class Solution:
56+
def containsPattern(self, arr: List[int], m: int, k: int) -> bool:
57+
n = len(arr)
58+
for i in range(n - m * k + 1):
59+
j = 0
60+
while j < m * k:
61+
if arr[i + j] != arr[i + (j % m)]:
62+
break
63+
j += 1
64+
if j == m * k:
65+
return True
66+
return False
5667
```
5768

5869
### **Java**
5970

6071
```java
72+
class Solution {
73+
public boolean containsPattern(int[] arr, int m, int k) {
74+
int n = arr.length;
75+
for (int i = 0; i <= n - m * k; ++i) {
76+
int j = 0;
77+
for (; j < m * k; ++j) {
78+
if (arr[i + j] != arr[i + (j % m)]) {
79+
break;
80+
}
81+
}
82+
if (j == m * k) {
83+
return true;
84+
}
85+
}
86+
return false;
87+
}
88+
}
89+
```
90+
91+
### **C++**
92+
93+
```cpp
94+
class Solution {
95+
public:
96+
bool containsPattern(vector<int>& arr, int m, int k) {
97+
int n = arr.size();
98+
for (int i = 0; i <= n - m * k; ++i) {
99+
int j = 0;
100+
for (; j < m * k; ++j) {
101+
if (arr[i + j] != arr[i + (j % m)]) {
102+
break;
103+
}
104+
}
105+
if (j == m * k) {
106+
return true;
107+
}
108+
}
109+
return false;
110+
}
111+
};
112+
```
113+
114+
### **Go**
115+
116+
```go
117+
func containsPattern(arr []int, m int, k int) bool {
118+
n := len(arr)
119+
for i := 0; i <= n-m*k; i++ {
120+
j := 0
121+
for ; j < m*k; j++ {
122+
if arr[i+j] != arr[i+(j%m)] {
123+
break
124+
}
125+
}
126+
if j == m*k {
127+
return true
128+
}
129+
}
130+
return false
131+
}
132+
```
61133

134+
### **TypeScript**
135+
136+
```ts
137+
function containsPattern(arr: number[], m: number, k: number): boolean {
138+
const n = arr.length;
139+
for (let i = 0; i <= n - m * k; ++i) {
140+
let j = 0;
141+
for (; j < m * k; ++j) {
142+
if (arr[i + j] != arr[i + (j % m)]) {
143+
break;
144+
}
145+
}
146+
if (j == m * k) {
147+
return true;
148+
}
149+
}
150+
return false;
151+
}
62152
```
63153

64154
### **...**
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
class Solution {
2+
public:
3+
bool containsPattern(vector<int>& arr, int m, int k) {
4+
int n = arr.size();
5+
for (int i = 0; i <= n - m * k; ++i) {
6+
int j = 0;
7+
for (; j < m * k; ++j) {
8+
if (arr[i + j] != arr[i + (j % m)]) {
9+
break;
10+
}
11+
}
12+
if (j == m * k) {
13+
return true;
14+
}
15+
}
16+
return false;
17+
}
18+
};
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
func containsPattern(arr []int, m int, k int) bool {
2+
n := len(arr)
3+
for i := 0; i <= n-m*k; i++ {
4+
j := 0
5+
for ; j < m*k; j++ {
6+
if arr[i+j] != arr[i+(j%m)] {
7+
break
8+
}
9+
}
10+
if j == m*k {
11+
return true
12+
}
13+
}
14+
return false
15+
}

solution/1500-1599/1566.Detect Pattern of Length M Repeated K or More Times/Solution.java

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,14 @@
11
class Solution {
22
public boolean containsPattern(int[] arr, int m, int k) {
3-
if (arr.length < m * k) {
4-
return false;
5-
}
6-
for (int i = 0; i <= arr.length - m * k; i++) {
7-
boolean match = true;
8-
for (int j = i + m; j < i + m * k; j++) {
9-
if (arr[j] != arr[j - m]) {
10-
match = false;
3+
int n = arr.length;
4+
for (int i = 0; i <= n - m * k; ++i) {
5+
int j = 0;
6+
for (; j < m * k; ++j) {
7+
if (arr[i + j] != arr[i + (j % m)]) {
118
break;
129
}
1310
}
14-
if (match) {
11+
if (j == m * k) {
1512
return true;
1613
}
1714
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
class Solution:
2+
def containsPattern(self, arr: List[int], m: int, k: int) -> bool:
3+
n = len(arr)
4+
for i in range(n - m * k + 1):
5+
j = 0
6+
while j < m * k:
7+
if arr[i + j] != arr[i + (j % m)]:
8+
break
9+
j += 1
10+
if j == m * k:
11+
return True
12+
return False
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
function containsPattern(arr: number[], m: number, k: number): boolean {
2+
const n = arr.length;
3+
for (let i = 0; i <= n - m * k; ++i) {
4+
let j = 0;
5+
for (; j < m * k; ++j) {
6+
if (arr[i + j] != arr[i + (j % m)]) {
7+
break;
8+
}
9+
}
10+
if (j == m * k) {
11+
return true;
12+
}
13+
}
14+
return false;
15+
}

0 commit comments

Comments
 (0)