Langsung ke konten
Hash map: hitung dan cari

Pelajaran 4.2

Menemukan duplikat

7 menit · 8 langkah

  1. Langkah 1 dari 8 · Penjelasan

    Untuk duplikat, pertanyaannya cuma satu: "sudah pernah lihat angka ini?" Simpan setiap angka yang lewat, lalu cek sebelum menyimpan.

    Kalau kamu juga butuh di mana angka itu pertama muncul, pakai Map dari angka ke index. Untuk [4, 1, 7, 1], 1 disimpan dengan index 1, lalu 1 yang kedua di index 3 sudah ada di map, jadi hasilnya true. Kalau cukup "ada atau tidak", pakai Set. seen.has(x) dan seen.add(x), masing-masing satu langkah.

  2. Langkah 2 dari 8 · Tebak hasilnya

    Apa yang di-return untuk [3, 3, 3, 5]?

    function solution(nums) {  const seen = new Set()  let dupes = 0  for (const x of nums) {    if (seen.has(x)) dupes++    seen.add(x)  }  return dupes}
    1. 2
    2. 3
    3. 1
  3. Langkah 3 dari 8 · Tebak hasilnya

    new Set(nums) membuang duplikat. Apa yang di-return untuk [1, 2, 2, 3, 3, 3]?

    function solution(nums) {  const unique = new Set(nums)  return nums.length - unique.size}
    1. 3
    2. 2
    3. 5
  4. Langkah 4 dari 8 · Cari bug-nya

    Soal "Return true kalau ada angka yang muncul dua kali." Untuk [1, 2, 1] kode ini me-return false. Ketuk baris yang salah.

    function solution(nums) {  const seen = new Set()  for (const x of nums) {    if (seen[x]) return true    seen.add(x)  }  return false}
  5. Langkah 5 dari 8 · Susun kodenya

    Susun function yang membuang duplikat tapi menjaga urutan kemunculan pertama. [3, 1, 3, 2, 1] jadi [3, 1, 2]. Dua baris tidak termasuk.

    const out = []seen.add(x)return [...seen].sort((a, b) => a - b)for (const x of nums) {}if (seen.has(x)) continuereturn out}out.push(x)function solution(nums) {const seen = new Set()if (!seen.has(x)) continue
  6. Langkah 6 dari 8 · Pilih pendekatan

    "Return huruf pertama yang muncul untuk kedua kalinya." Constraint: 1 ≤ s.length ≤ 10⁵.
    Cara mana yang tepat?

    1. Satu kali jalan dengan Set. Return huruf yang sudah ada di Set
    2. Untuk setiap huruf, cek s.indexOf(ch) !== s.lastIndexOf(ch)
    3. Sort hurufnya, lalu cari dua huruf sama yang bersebelahan
  7. Langkah 7 dari 8 · Tulis kodenya

    solution(nums)

    Return angka pertama yang muncul untuk kedua kalinya (yang salinan keduanya paling awal). Kalau tidak ada, return null.
    Constraint: 0 ≤ nums.length ≤ 10⁵.

    function solution(nums) {  // [2, 5, 1, 5, 2] -> 5 }
  8. Langkah 8 dari 8 · Ringkasan

    • "Sudah pernah lihat?" dijawab dengan Set. Kalau butuh index-nya, pakai Map.
    • Cek dulu, baru simpan. Kalau terbalik, setiap item terlihat duplikat.
    • Set dan Map dibaca dengan .has dan .get, bukan kurung siku.

    Kartu pola

    Set untuk "sudah pernah lihat"
    Kapan dipakai: Saat soal menyebut duplikat, unik, berulang, atau "muncul lagi".
    const seen = new Set()for (const x of nums) {  if (seen.has(x)) return x  seen.add(x)}