Easybit-manipulation
Number of 1 Bits
Problem (yeniden ifade)
32-bit tamsayıdaki set bit sayısını (Hamming ağırlığı) döndür.
Sezgi
n &= n-1 en düşük set biti temizler; n=0 olana kadar say.
Yaklaşımlar
Brian Kernighan
DoğrulanmadıZaman O(popcount)Alan O(1)
Fikir. while n: n&=n-1; c++.
Yürüyüş. 11 → 3 (1011).
Trade-off. n&1 + n>>>1 döngüsü O(32); Kernighan O(#bits).
Çözüm
export function hammingWeight(n: number): number {
let c = 0;
n >>>= 0;
while (n) {
n &= n - 1;
c++;
}
return c;
}
export function hammingWeight(n: number): number {
let c = 0;
n >>>= 0;
while (n) {
n &= n - 1;
c++;
}
return c;
}
Şablon bağlantısı
Bit manipülasyonu set-bit kontrolleri.
Yansıma
n &= n-1en düşük 1 bitini düşürür. Döngü sayısı bit sayısıdır.- Python’da negatif sayının bitleri bitmez. Bu problem işaretsiz 32 bit.
- 0 cevap 0. Tek bitlik
2**31işaretsiz 1.