Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

การหาตัวเลขที่หายไป 2 ตัวที่ปรากฏ 1 ครั้งและ 2 ครั้งใน JavaScript

ปัญหา

เราต้องเขียนฟังก์ชัน 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