Back to all solutions

#3034 - Number of Subarrays That Match a Pattern I

Problem Description

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.

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]:

  • nums[i + k + 1] > nums[i + k] if pattern[k] == 1.
  • nums[i + k + 1] == nums[i + k] if pattern[k] == 0.
  • nums[i + k + 1] < nums[i + k] if pattern[k] == -1.

Return the count of subarrays in nums that match the pattern.

Solution

/**
 * @param {number[]} nums
 * @param {number[]} pattern
 * @return {number}
 */
var countMatchingSubarrays = function(nums, pattern) {
  let result = 0;
  const m = pattern.length;

  for (let i = 0; i <= nums.length - m - 1; i++) {
    let isMatch = true;
    for (let j = 0; j < m; j++) {
      const diff = nums[i + j + 1] - nums[i + j];
      if ((pattern[j] === 1 && diff <= 0) || (pattern[j] === 0 && diff !== 0)
          || (pattern[j] === -1 && diff >= 0)) {
        isMatch = false;
        break;
      }
    }
    if (isMatch) result++;
  }

  return result;
};