İçeriğe atla
ΣDSA Patterns
Menü
Dil

Hashing

Rehber 6 / 6 · Yol 6 / 6

Etkileşimli

Zihinsel model

Bu problem için animasyonlu çözüm. Adımları kaydır veya boşlukla duraklat; değişmezi yüksek sesle yeniden anlat.

Adım 1 / 8
1
1
1
2
2
3
eşlem1→32→23→1

K = 2

En sık K. Önce frekansları say.

Demo önizleme: Bu çözümler otomatik test paketini geçiyor ama insan tarafından incelenmedi. Trade-off ve yazıları taslak olarak değerlendirin.

Top K Frequent Elements

Problem (yeniden ifade)

Herhangi bir sırada k en sık elemanı döndür. Cevap tektir.

Sezgi

Frekansları say, sonra frekansa göre bucket’la ki en yoğun bucket’lar sonda olsun.

Yaklaşımlar

Frekans bucket'ları

Doğrulanmadı
Zaman O(n)Alan O(n)

Fikir. Değer→sayı map. buckets[c] sayısı c olan değerleri tutar. Bucket’ları yüksekten düşüğe tara.

Yürüyüş. [1,1,1,2,2,3], k=2 → 1’in freq’i 3, 2’nin 2 → [1,2].

Trade-off. Heap O(n log k). Frekans en fazla n olduğu için bucket taraması worst-case O(n).

Çözüm
export function topKFrequent(nums: number[], k: number): number[] {
  const freq = new Map<number, number>();
  for (const x of nums) freq.set(x, (freq.get(x) ?? 0) + 1);
  const buckets: number[][] = Array.from({ length: nums.length + 1 }, () => []);
  for (const [val, c] of freq) buckets[c]!.push(val);
  const out: number[] = [];
  for (let c = buckets.length - 1; c >= 0 && out.length < k; c--) {
    for (const v of buckets[c]!) {
      out.push(v);
      if (out.length === k) return out;
    }
  }
  return out;
}
export function topKFrequent(nums: number[], k: number): number[] {
  const freq = new Map<number, number>();
  for (const x of nums) freq.set(x, (freq.get(x) ?? 0) + 1);
  const buckets: number[][] = Array.from({ length: nums.length + 1 }, () => []);
  for (const [val, c] of freq) buckets[c]!.push(val);
  const out: number[] = [];
  for (let c = buckets.length - 1; c >= 0 && out.length < k; c--) {
    for (const v of buckets[c]!) {
      out.push(v);
      if (out.length === k) return out;
    }
  }
  return out;
}

Şablon bağlantısı

Hash map ile say, sonra frekansa göre kova (heap / quick-select de çalışır).

Yansıma