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

หา element ที่ปรากฏจำนวนครั้งคี่ในอาร์เรย์ - JavaScript

อาร์เรย์: [20, 1, -1, 2, -2, 3, 3, 5, 5, 1, 2, 4, 20, 4, -1, -2, 5]

มี element เพียงตัวเดียวที่ปรากฏครั้งคี่ (odd times) หาตัวนั้น

ตัวอย่างโค้ด

const arr = [20, 1, -1, 2, -2, 3, 3, 5, 5, 1, 2, 4, 20, 4, -1, -2, 5];
const findOdd = arr => {
  let count = 0;
  let last;
  arr.sort((a, b) => a - b);
  for (let i = 0; i < arr.length; i++) {
    if (arr[i] === last) {
      count++;
      continue;
    };
    if (count % 2) {
      return last;
    };
    last = arr[i];
    count = 1;
  };
  return last;
};
console.log(findOdd(arr));

ผลลัพธ์

5

คำอธิบาย: เรียงอาร์เรย์ก่อน แล้ววนนับ consecutive duplicates ถ้าจำนวนครั้งเป็นคี่ คืนค่าตัวก่อนหน้า (last) ตัวสุดท้ายที่เหลือคือคำตอบ

วิธี XOR (เร็วกว่า O(n)): arr.reduce((a, b) => a ^ b, 0) เนื่องจาก a^a=0 และ a^0=a ค่าที่เหลือคือตัวที่ปรากฏครั้งคี่