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

Kalıp #25

Bit Manipülasyonu

Önerilen

XOR, maske, kaydırma ve set-bit hileleri ile O(1) durum.

Ne zaman kullanılır

Çiftler iptal, bitmask olarak alt kümeler, iki'nin kuvveti testleri veya DP'de sıkı durum.

Tanıma ipuçları

  • Tek sayı (XOR)
  • Bit sayma / iki'nin kuvveti
  • Maske üzerinde alt küme DP

Yaygın tuzaklar

  • İşaret biti / aritmetik vs mantıksal kaydırma karışıklığı
  • Sabit int dillerde sınırsız genişlik varsaymak
  • Bitleri 0..n-1 dolaşırken off-by-one

90 saniyelik tanıma egzersizi

Hangisi en iyi uyuyor?

  • Tek sayı (XOR)
  • Bit sayma / iki'nin kuvveti
  • Maske üzerinde alt küme DP

Interactive

Zihinsel model

Değişmezin tam adım adım anlatımı. Duraklat, noktalara tıkla veya ← → kullan. Her adımı kendi cümlelerinle anlatmayı hedefle.

Adım 1 / 8
4
1
2
1
2

x = 0

Single number via XOR: pairs cancel to 0.

Nasıl düşünülür

XOR kendi tersidir: çiftler kaybolur. n & (n-1) en düşük set bit’i düşürür. n & -n onu izole eder. Bitmask’ler küçük evren (n ≤ 20) alt kümelerini DP veya numaralandırma için kodlar.

Şablon şekilleri

Şekil Temel hamle Notlar
XOR fold x ^= a[i] Tek sayı
En düşük bit n & -n / n & (n-1) Say / kaldır
Maske DP mask in 0..1<<n Alt kümeler

Karmaşıklık temeli

Sıkça O(n) kelime işlemi veya alt küme DP için O(2^n · n).

Şablondan probleme

  1. Problemi bir bitwise kimliğe eşle.
  2. Dile özgü int boyutuna dikkat et.
  3. Kimlik netse O(n) taramaya bit hilelerini tercih et.
  4. Maskeler: gerekirse alt maskeleri dikkat dolaş.

Şablon

TypeScript, Python ve C#’te aynı iskelet. Değişmezi uyarla; yapıyı koru.

Bit Manipülasyonu · Şablon
/** Bit template: single number via XOR fold. */
export function singleNumber(nums: number[]): number {
  let x = 0;
  for (const v of nums) x ^= v;
  return x;
}
/** Bit template: single number via XOR fold. */
export function singleNumber(nums: number[]): number {
  let x = 0;
  for (const v of nums) x ^= v;
  return x;
}
#DurumProblemTürBitti
  1. 1#136 Single NumberRehber
  2. 2#191 Number of 1 BitsRehber
  3. 3#231 Power of TwoRehber
  4. 4#268 Missing NumberRehber
  5. 5#338 Counting BitsRehber
  6. 6#371 Sum of Two IntegersRehber