在 JavaScript 中将卡片重新排列成组

问题

我们需要编写一个 JavaScript 函数,它接受一个数字数组 arr 作为第一个参数,一个数字 num 作为第二个参数。

数组中的数字在 [1, 13] 范围内,包括界限,代表扑克牌的从 1 开始的索引。

我们的函数应该确定是否存在将卡片重新排列成组的方法,以便每个组的大小为 num,并且由 num 个连续的卡片组成。

例如,如果函数的输入是

输入

const arr = [1, 4, 3, 2];
const num = 2;

输出

const output = 2;

输出说明

因为卡片可以重新排列为 [1, 2], [3, 4]

示例

以下是代码 -

const arr = [1, 4, 3, 2];
const num = 2;
const canRearrange = (arr = [], num = 1) => {
   const find = (map, n, num) => {
   let j = 0
   while(j < num) {
      if(!map[n + j]) return false
         else map[n + j] -= 1
         j++
      }
      return true
   }
   let map = {}
   arr.sort(function(a, b) {return a - b})
   for(let n of arr) {
      map[n] = map[n] ? map[n] + 1 : 1
   }
   for(let n of arr) {
      if(map[n] === 0 || find(map, n, num)) continue
         else return false
   }
   return true
};
console.log(canRearrange(arr, num));
输出结果
true