Langsung ke konten
Hash map: hitung dan cari

Pelajaran 4.1

Menghitung frekuensi

6 menit · 7 langkah

  1. Langkah 1 dari 7 · Penjelasan

    Map menyimpan pasangan key dan value, dan bisa mencari key dalam satu langkah. Untuk menghitung, key-nya adalah item dan value-nya adalah berapa kali item itu muncul.

    Satu baris ini yang dipakai terus: counts.set(x, (counts.get(x) || 0) + 1). Kalau x belum ada, get memberi undefined, dan || 0 mengubahnya jadi 0.

  2. Langkah 2 dari 7 · Tebak hasilnya

    Function ini me-return hitungan terbanyak. Apa hasilnya untuk "mississippi"?

    function solution(s) {  const counts = new Map()  let best = 0  for (const ch of s) {    const c = (counts.get(ch) || 0) + 1    counts.set(ch, c)    if (c > best) best = c  }  return best}
    1. 4
    2. 8
    3. 11
    4. 2
  3. Langkah 3 dari 7 · Cari bug-nya

    Untuk "aab", kode ini me-return NaN, padahal harusnya 2. Ketuk baris yang salah.

    function solution(s) {  const counts = new Map()  for (const ch of s) {    counts.set(ch, counts.get(ch) + 1)  }  return counts.get("a")}
  4. Langkah 4 dari 7 · Telusuri kodenya

    Isi x dan c di langkah yang ditandai. c adalah hitungan baru untuk x.

    function solution(nums) {  const counts = new Map()  let maxCount = 0  for (const x of nums) {    const c = (counts.get(x) || 0) + 1    counts.set(x, c)    maxCount = Math.max(maxCount, c)  }  return maxCount}

    solution([2, 7, 2, 2])

  5. Langkah 5 dari 7 · Susun kodenya

    Susun function yang me-return huruf pertama yang muncul tepat sekali, atau "" kalau tidak ada. Hitung dulu, lalu cari. Dua baris tidak termasuk.

    if (counts.get(ch) > 1) return ch}const counts = new Map()if (counts.get(ch) === 1) return ch}for (const ch of s) {for (const ch of s) {}return ""counts.set(ch, 1)function solution(s) {counts.set(ch, (counts.get(ch) || 0) + 1)
  6. Langkah 6 dari 7 · Pilih pendekatan

    "Return nama yang paling banyak muncul di votes." Constraint: 1 ≤ votes.length ≤ 10⁵.
    Cara mana yang paling pas?

    1. Map dari nama ke hitungan, satu kali jalan
    2. Untuk setiap nama, hitung kemunculannya dengan loop dalam
    3. Sort dulu, lalu hitung nama yang sama yang berderet
    4. Array biasa dengan nama sebagai index
  7. Langkah 7 dari 7 · Ringkasan

    • Map mencari key dalam satu langkah. Untuk menghitung, key adalah item dan value adalah hitungannya.
    • counts.get(x) untuk key baru adalah undefined. Selalu tambahkan || 0.
    • Banyak soal butuh dua kali jalan. Pertama hitung, lalu pakai hitungannya.

    Kartu pola

    Hitung dengan Map
    Kapan dipakai: Saat soal bertanya "berapa kali", "paling sering", "muncul sekali", atau "sama banyak".
    const counts = new Map()for (const x of items) {  counts.set(x, (counts.get(x) || 0) + 1)}