ปัญหา
เราต้องเขียนฟังก์ชัน JavaScript ที่รับอาร์เรย์ที่ตัวเลขทุกตัวปรากฏ 3 ครั้ง ยกเว้นตัวหนึ่งปรากฏ 2 ครั้ง และอีกตัวปรากฏ 1 ครั้ง ฟังก์ชันควรหาและคืนค่าตัวเลขทั้งสองนี้
ตัวอย่าง
โค้ดตัวอย่างด้านล่าง:
const arr = [1, 1, 1, 2, 2, 3];
const findMissing = (arr = []) => {
let x = 0;
let y = 0;
for (let i = 0; i < arr.length; i++) {
if (arr.filter(a => a === arr[i]).length === 2) {
y = arr[i];
}
if (arr.filter(b => b === arr[i]).length === 1) {
x = arr[i];
}
}
return [x, y];
};
console.log(findMissing(arr));
ผลลัพธ์
[3, 2]
คำอธิบายเพิ่มเติม
โค้ดใช้ filter นับจำนวนครั้ง O(n²) สามารถทำได้ O(n) ด้วย bitwise XOR หรือ Hash map นับความถี่ แล้วหาค่าที่ count=1 และ count=2