Skip to content

Commit b778ba5

Browse files
authored
feat: add solutions to lc problem: No.3034
1 parent 00bacf9 commit b778ba5

File tree

1 file changed

+107
-3
lines changed
  • solution/3000-3099/3034.Number of Subarrays That Match a Pattern I

1 file changed

+107
-3
lines changed

solution/3000-3099/3034.Number of Subarrays That Match a Pattern I/README_EN.md

+107-3
Original file line numberDiff line numberDiff line change
@@ -52,19 +52,123 @@ Hence, there are 2 subarrays in nums that match the pattern.
5252
<!-- tabs:start -->
5353

5454
```python
55-
55+
class Solution:
56+
def countMatchingSubarrays(self, nums: List[int], pattern: List[int]) -> int:
57+
n = len(nums)
58+
m = len(pattern)
59+
count = 0
60+
for i in range(n - m):
61+
flag = True
62+
for j in range(m):
63+
if (
64+
(pattern[j] == 1 and nums[i + j + 1] <= nums[i + j])
65+
or (pattern[j] == 0 and nums[i + j + 1] != nums[i + j])
66+
or (pattern[j] == -1 and nums[i + j + 1] >= nums[i + j])
67+
):
68+
flag = False
69+
break
70+
if flag:
71+
count += 1
72+
return count
5673
```
5774

5875
```java
59-
76+
class Solution {
77+
public int countMatchingSubarrays(int[] nums, int[] pattern) {
78+
int n = nums.length;
79+
int m = pattern.length;
80+
int count = 0;
81+
for (int i = 0; i <= n - m - 1; i++) {
82+
boolean flag = true;
83+
for (int j = 0; j < m; j++) {
84+
if ((pattern[j] == 1 && nums[i + j + 1] <= nums[i + j]) ||
85+
(pattern[j] == 0 && nums[i + j + 1] != nums[i + j]) ||
86+
(pattern[j] == -1 && nums[i + j + 1] >= nums[i + j])) {
87+
flag = false;
88+
break;
89+
}
90+
}
91+
if (flag) {
92+
count++;
93+
}
94+
}
95+
return count;
96+
}
97+
}
6098
```
6199

62100
```cpp
63-
101+
class Solution {
102+
public:
103+
int countMatchingSubarrays(vector<int>& nums, vector<int>& pattern) {
104+
assert(nums.size() >= 2 && nums.size() <= 100);
105+
for (int x : nums) {
106+
assert(x >= 1 && x <= 1000000000);
107+
}
108+
const int m = pattern.size();
109+
assert(m >= 1 && m < nums.size());
110+
for (int x : pattern) {
111+
assert(abs(x) <= 1);
112+
}
113+
int r = 0;
114+
for (int i = 0; i + m < nums.size(); ++i) {
115+
bool mark = true;
116+
for (int k = 0; mark && k < m; ++k) {
117+
mark = (pattern[k] == 1 && nums[i + k + 1] > nums[i + k])
118+
|| (pattern[k] == 0 && nums[i + k + 1] == nums[i + k])
119+
|| (pattern[k] == -1 && nums[i + k + 1] < nums[i + k]);
120+
}
121+
r += mark;
122+
}
123+
return r;
124+
}
125+
};
64126
```
65127
66128
```go
129+
func countMatchingSubarrays(nums []int, pattern []int) int {
130+
n := len(nums)
131+
m := len(pattern)
132+
count := 0
133+
for i := 0; i <= n-m-1; i++ {
134+
flag := true
135+
for j := 0; j < m; j++ {
136+
if (pattern[j] == 1 && nums[i+j+1] <= nums[i+j]) ||
137+
(pattern[j] == 0 && nums[i+j+1] != nums[i+j]) ||
138+
(pattern[j] == -1 && nums[i+j+1] >= nums[i+j]) {
139+
flag = false
140+
break
141+
}
142+
}
143+
if flag {
144+
count++
145+
}
146+
}
147+
return count
148+
}
149+
```
67150

151+
```ts
152+
function countMatchingSubarrays(nums: number[], pattern: number[]): number {
153+
const n: number = nums.length;
154+
const m: number = pattern.length;
155+
let count: number = 0;
156+
for (let i = 0; i <= n - m - 1; i++) {
157+
let flag: boolean = true;
158+
for (let j = 0; j < m; j++) {
159+
if ((pattern[j] === 1 && nums[i + j + 1] <= nums[i + j]) ||
160+
(pattern[j] === 0 && nums[i + j + 1] !== nums[i + j]) ||
161+
(pattern[j] === -1 && nums[i + j + 1] >= nums[i + j])) {
162+
flag = false;
163+
break;
164+
}
165+
}
166+
if (flag) {
167+
count++;
168+
}
169+
}
170+
return count;
171+
}
68172
```
69173

70174
<!-- tabs:end -->

0 commit comments

Comments
 (0)