Skip to content

Commit ef5aae5

Browse files
authored
Merge pull request #1504 from VaishnaviMankala19/lc-sol-3034
added 3034-lc-solution
2 parents 28d4b55 + 305cd1f commit ef5aae5

File tree

1 file changed

+147
-0
lines changed

1 file changed

+147
-0
lines changed
Lines changed: 147 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,147 @@
1+
---
2+
id: number-of-subarrays-that-match-a-pattern-i
3+
title: Number of Subarrays That Match a Pattern I (LeetCode)
4+
sidebar_label: 3034-NumberOfSubarraysThatMatchAPatternI
5+
tags:
6+
- Array
7+
- Pattern
8+
- Sliding Window
9+
description: Count the number of subarrays in an integer array that match a given pattern.
10+
sidebar_position: 3034
11+
---
12+
13+
## Problem Description
14+
15+
| Problem Statement | Solution Link | LeetCode Profile |
16+
| :---------------- | :------------ | :--------------- |
17+
| [Number of Subarrays That Match a Pattern I](https://leetcode.com/problems/number-of-subarrays-that-match-a-pattern-i/) | [Number of Subarrays That Match a Pattern I Solution on LeetCode](https://leetcode.com/problems/number-of-subarrays-that-match-a-pattern-i/solutions/) | [vaishu_1904](https://leetcode.com/u/vaishu_1904/) |
18+
19+
## Problem Description
20+
21+
You are given a 0-indexed integer array nums of size n, and a 0-indexed integer array pattern of size m consisting of integers -1, 0, and 1.
22+
23+
A subarray nums[i..j] of size m + 1 is said to match the pattern if the following conditions hold for each element pattern[k]:
24+
25+
- `nums[i + k + 1] > nums[i + k]` if `pattern[k] == 1`.
26+
- `nums[i + k + 1] == nums[i + k]` if `pattern[k] == 0`.
27+
- `nums[i + k + 1] < nums[i + k]` if `pattern[k] == -1`.
28+
29+
Return the count of subarrays in nums that match the pattern.
30+
31+
### Example 1
32+
33+
- **Input:** `nums = [1,2,3,4,5,6]`, `pattern = [1,1]`
34+
- **Output:** `4`
35+
- **Explanation:** The pattern `[1,1]` indicates that we are looking for strictly increasing subarrays of size 3. In the array `nums`, the subarrays `[1,2,3]`, `[2,3,4]`, `[3,4,5]`, and `[4,5,6]` match this pattern.
36+
Hence, there are 4 subarrays in `nums` that match the pattern.
37+
38+
### Example 2
39+
40+
- **Input:** `nums = [1,4,4,1,3,5,5,3]`, `pattern = [1,0,-1]`
41+
- **Output:** `2`
42+
- **Explanation:** Here, the pattern `[1,0,-1]` indicates that we are looking for a sequence where the first number is smaller than the second, the second is equal to the third, and the third is greater than the fourth. In the array `nums`, the subarrays `[1,4,4,1]`, and `[3,5,5,3]` match this pattern.
43+
Hence, there are 2 subarrays in `nums` that match the pattern.
44+
45+
### Constraints
46+
47+
- `2 <= n == nums.length <= 100`
48+
- `1 <= nums[i] <= 10^9`
49+
- `1 <= m == pattern.length < n`
50+
- `-1 <= pattern[i] <= 1`
51+
52+
## Approach
53+
54+
To solve this problem, we can use a sliding window approach to efficiently count the number of subarrays that match the given pattern. Here's the approach:
55+
56+
1. Iterate through the array with a sliding window of size `m+1`.
57+
2. For each window, check if the subarray matches the pattern.
58+
3. Increment the count if the subarray matches the pattern.
59+
60+
### Solution Code
61+
62+
#### Python
63+
64+
```python
65+
class Solution:
66+
def countMatchingSubarrays(self, nums: List[int], pattern: List[int]) -> int:
67+
n, m = len(nums), len(pattern)
68+
count = 0
69+
70+
for i in range(n - m):
71+
match = True
72+
for k in range(m):
73+
if (pattern[k] == 1 and nums[i + k + 1] <= nums[i + k]) or \
74+
(pattern[k] == 0 and nums[i + k + 1] != nums[i + k]) or \
75+
(pattern[k] == -1 and nums[i + k + 1] >= nums[i + k]):
76+
match = False
77+
break
78+
if match:
79+
count += 1
80+
81+
return count
82+
```
83+
84+
#### C++
85+
86+
```c++
87+
#include <vector>
88+
using namespace std;
89+
90+
class Solution {
91+
public:
92+
int countMatchingSubarrays(vector<int>& nums, vector<int>& pattern) {
93+
int n = nums.size(), m = pattern.size();
94+
int count = 0;
95+
96+
for (int i = 0; i <= n - m - 1; ++i) {
97+
bool match = true;
98+
for (int k = 0; k < m; ++k) {
99+
if ((pattern[k] == 1 && nums[i + k + 1] <= nums[i + k]) ||
100+
(pattern[k] == 0 && nums[i + k + 1] != nums[i + k]) ||
101+
(pattern[k] == -1 && nums[i + k + 1] >= nums[i + k])) {
102+
match = false;
103+
break;
104+
}
105+
}
106+
if (match) {
107+
count++;
108+
}
109+
}
110+
111+
return count;
112+
}
113+
};
114+
```
115+
116+
#### Java
117+
118+
```java
119+
class Solution {
120+
public int countMatchingSubarrays(int[] nums, int[] pattern) {
121+
int n = nums.length, m = pattern.length;
122+
int count = 0;
123+
124+
for (int i = 0; i <= n - m - 1; ++i) {
125+
boolean match = true;
126+
for (int k = 0; k < m; ++k) {
127+
if ((pattern[k] == 1 && nums[i + k + 1] <= nums[i + k]) ||
128+
(pattern[k] == 0 && nums[i + k + 1] != nums[i + k]) ||
129+
(pattern[k] == -1 && nums[i + k + 1] >= nums[i + k])) {
130+
match = false;
131+
break;
132+
}
133+
}
134+
if (match) {
135+
count++;
136+
}
137+
}
138+
139+
return count;
140+
}
141+
}
142+
```
143+
144+
### Conclusion
145+
The solutions use a sliding window approach to efficiently count the number of subarrays that match
146+
the given pattern. This ensures an efficient and straightforward way to solve the problem across
147+
different programming languages.

0 commit comments

Comments
 (0)