ปัญหา
เราจำเป็นต้องเขียนฟังก์ชัน JavaScript ที่รับอาร์เรย์ของตัวเลข arr เป็นอาร์กิวเมนต์แรกและอาร์กิวเมนต์เดียว
อาร์เรย์ arr จะมีความยาวเท่ากันเสมอ
ฟังก์ชันของเราควรคืนค่าเป็น จริง หากสามารถจัดลำดับใหม่ได้เท่านั้น arr[2 * i + 1] =2 * arr[2 * i] สำหรับทุก ๆ 0 <=i
ตัวอย่างเช่น หากอินพุตของฟังก์ชันคือ −
const arr = [4, -2, 2, -4];
จากนั้นผลลัพธ์ควรเป็น −
const output = true;
คำอธิบายผลลัพธ์
เรานำสองกลุ่ม [-2,-4] และ [2,4] มาสร้างเป็น [-2,-4,2,4] หรือ [2,4,-2,-4]
ตัวอย่าง
รหัสสำหรับสิ่งนี้จะเป็น −
const arr = [4, -2, 2, -4]; const canRearrange = (arr = []) => { const map = arr.reduce((acc, num) => { acc[num] = (acc[num] || 0) + 1 return acc }, {}); const keys = Object.keys(map) .map(key => Number(key)) .sort((a, b) => a - b) for (const key of keys) { if (key < 0) { while (map[key] > 0) { if (map[key / 2] > 0) { map[key] -= 1 map[key / 2] -= 1 } else { return false } } } else { while (map[key] > 0) { if (map[key * 2] > 0) { map[key] -= 1 map[key * 2] -= 1 } else { return false } } } } return true }; console.log(canRearrange(arr));
ผลลัพธ์
และผลลัพธ์ในคอนโซลจะเป็น −
true