ปัญหา
เราต้องเขียนฟังก์ชัน JavaScript ที่รับอาร์เรย์ของตัวเลข arr เป็นอาร์กิวเมนต์แรก และตัวเลข num เป็นอาร์กิวเมนต์ที่สอง
ตัวเลขในอาร์เรย์อยู่ในช่วง [1, 13] รวมขีดจำกัด แทนดัชนี 1-based ของไพ่เล่น
ฟังก์ชันควรตัดสินใจว่ามีวิธีจัดเรียงไพ่เป็นกลุ่มได้หรือไม่ โดยที่แต่ละกลุ่มมีขนาด 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