JavaScript 中具有 n 个不同元素的数组部分

javascriptweb developmentfront end technology

问题

我们需要编写一个 JavaScript 函数,该函数将一个文字数组 arr 作为第一个参数。我们函数的第二个参数将是一个数字 num。我们的函数应该计数并返回包含恰好 num 个不同元素的数组的子数组的数量。

例如,如果函数的输入是 −

const arr = [12, 15, 12, 15, 18];
const num = 2;

那么输出应该是 −

const output = 7;

输出说明

由恰好 2 个不同元素形成的子数组 −

[12,15], [15,12], [12,15], [15,18], [12,15,12], [15,12,15], [12,15,12,15]

示例

其代码为 −

const arr = [12, 15, 12, 15, 18];
const num = 2;
const distinctSubarrays = (arr = [], num = 1) => {
   const findDistinct = (count) => {
      const map = {};
      let ptr = 0;
      let distinct = 0;
      let res = 0;
      for(let right = 0; right < arr.length; right++){
         const num = arr[right];
         map[num] = (map[num] || 0) + 1;
         if(map[num] === 1){
            distinct += 1;
         };
         while(distinct > count){
            map[arr[ptr]] -= 1;
            if(map[arr[ptr]] === 0){
               distinct -= 1;
            };
            ptr += 1;
         };
         res += right - ptr + 1;
      };
      return res;
   };
   return findDistinct(num) - findDistinct(num - 1)
};
console.log(distinctSubarrays(arr, num));

输出

控制台中的输出将是 −

7

相关文章