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

หาสมาชิกซ้ำแรกในอาร์เรย์ในเวลาเชิงเส้น (Linear Time) ใน JavaScript

เราต้องเขียนฟังก์ชัน JavaScript ที่รับอาร์เรย์อ่านอย่างเดียว (read only) ของ n + 1 จำนวนเต็มระหว่าง 1 และ n ฟังก์ชันควรหาตัวเลขหนึ่งตัวที่ซ้ำในเวลาเชิงเส้นและใช้พื้นที่สูงสุด O(n)

เช่น ถ้าอาร์เรย์อินพุตคือ:

const arr = [3 4 1 4 1];

ผลลัพธ์ควรเป็น:

const output = 1;

ถ้ามีคำตอบที่เป็นไปได้หลายคำตอบ (เหมือนข้างต้น) เราควรแสดงผลใดก็ได้ ถ้าไม่มีค่าซ้ำ เราควรแสดงผล -1

ตัวอย่าง

const arr = [3, 4, 1, 4, 1];
const findRepeatedNumber = (arr = []) => {
  const set = new Set();
  for (const item of arr) {
    if (set.has(item)){
      return item;
    };
    set.add(item);
  };
  return -1;
};
console.log(findRepeatedNumber(arr));

ผลลัพธ์

สิ่งนี้จะให้ผลลัพธ์ดังนี้:

4