Kalıp #25
Bit Manipülasyonu
ÖnerilenXOR, 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
- Problemi bir bitwise kimliğe eşle.
- Dile özgü int boyutuna dikkat et.
- Kimlik netse O(n) taramaya bit hilelerini tercih et.
- 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ürZorlukBitti
- 1#136 Single NumberRehbereasy
- 2#191 Number of 1 BitsRehbereasy
- 3#231 Power of TwoRehbereasy
- 4#268 Missing NumberRehbereasy
- 5#338 Counting BitsRehbereasy
- 6#371 Sum of Two IntegersRehbermedium