我们需要编写一个 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