2527 Count Subarrays With Fixed Bounds
2527 Count Subarrays With Fixed Bounds
Count Subarrays With Fixed Bounds 
You are given an integer array nums and two integers minK and maxK.
A fixed-bound subarray of nums is a subarray that satisfies the following conditions:
1
2
The **minimum** value in the subarray is equal to minK.
The **maximum** value in the subarray is equal to maxK.
Return the number of fixed-bound subarrays.
A subarray is a contiguous part of an array.
Example 1:
1
2
3
4
5
**Input:** nums = [1,3,5,2,7,5], minK = 1, maxK = 5
**Output:** 2
**Explanation:** The fixed-bound subarrays are [1,3,5] and [1,3,5,2].
Example 2:
1
2
3
4
5
**Input:** nums = [1,1,1,1], minK = 1, maxK = 1
**Output:** 10
**Explanation:** Every subarray of nums is a fixed-bound subarray. There are 10 possible subarrays.
Constraints:
1
2
2 <= nums.length <= 105
1 <= nums[i], minK, maxK <= 106
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
class Solution:
def countSubarrays(self, nums: List[int], minK: int, maxK: int) -> int:
# consider the elements mark min and max
# also mark lower and upper numbers as 0
# now we need sub arrays that include min amd max - a....b...c...d -> d - a
# other possibility is a .... b ....d....c -? no subarray
for i, k in enumerate(nums):
if k < minK or k > maxK:
nums[i] = 0
left = 0
right = 0
founda = -1 # Index of last minK
foundb = -1 # Index of last maxK
res = 0
nums = [0] + nums + [0] # Add boundary zeros
for i in range(len(nums)):
if nums[i] == 0:
left = i
founda = -1
foundb = -1
else:
if nums[i] == minK:
founda = i
if nums[i] == maxK:
foundb = i
if founda != -1 and foundb != -1:
res += min(founda, foundb) - left
return res
This post is licensed under CC BY 4.0 by the author.