# 2444. Count Subarrays With Fixed Bounds

• Time: $O(n)$
• Space: $O(1)$
  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 class Solution { public: long long countSubarrays(vector& nums, int minK, int maxK) { long long ans = 0; int j = -1; int prevMinKIndex = -1; int prevMaxKIndex = -1; for (int i = 0; i < nums.size(); ++i) { if (nums[i] < minK || nums[i] > maxK) j = i; if (nums[i] == minK) prevMinKIndex = i; if (nums[i] == maxK) prevMaxKIndex = i; // any index k in [j + 1, min(prevMinKIndex, prevMaxKIndex)] can be the // start of the subarray s.t. nums[k..i] satisfies the conditions ans += max(0, min(prevMinKIndex, prevMaxKIndex) - j); } return ans; } }; 
  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 class Solution { public long countSubarrays(int[] nums, int minK, int maxK) { long ans = 0; int j = -1; int prevMinKIndex = -1; int prevMaxKIndex = -1; for (int i = 0; i < nums.length; ++i) { if (nums[i] < minK || nums[i] > maxK) j = i; if (nums[i] == minK) prevMinKIndex = i; if (nums[i] == maxK) prevMaxKIndex = i; // any index k in [j + 1, min(prevMinKIndex, prevMaxKIndex)] can be the // start of the subarray s.t. nums[k..i] satisfies the conditions ans += Math.max(0, Math.min(prevMinKIndex, prevMaxKIndex) - j); } return ans; } } 
  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 class Solution: def countSubarrays(self, nums: List[int], minK: int, maxK: int) -> int: ans = 0 j = -1 prevMinKIndex = -1 prevMaxKIndex = -1 for i, num in enumerate(nums): if num < minK or num > maxK: j = i if num == minK: prevMinKIndex = i if num == maxK: prevMaxKIndex = i # any index k in [j + 1, min(prevMinKIndex, prevMaxKIndex)] can be the # start of the subarray s.t. nums[k..i] satisfies the conditions ans += max(0, min(prevMinKIndex, prevMaxKIndex) - j) return ans