Rumah > hujung hadapan web > tutorial js > Meditasi LeetCode: Mengira Bit

Meditasi LeetCode: Mengira Bit

Barbara Streisand
Lepaskan: 2024-12-27 16:41:10
asal
687 orang telah melayarinya

LeetCode Meditations: Counting Bits

Penerangan untuk Mengira Bit berkata:

Diberi integer n, kembalikan susunan ans panjang n 1 supaya untuk setiap i (0 <= i <= n) , ans[i] ialah nombor daripada 1's dalam perwakilan binari i.

Contohnya:

Input: n = 2
Output: [0, 1, 1]

Explanation:
0 --> 0
1 --> 1
2 --> 10




</p>
<p>Atau:<br>
</p>

<pre class="brush:php;toolbar:false">Input: n = 5
Output: [0, 1, 1, 2, 1, 2]

Explanation:
0 --> 0
1 --> 1
2 --> 10
3 --> 11
4 --> 100
5 --> 101
Salin selepas log masuk

Masalahnya mahu kita mendapatkan nombor 1s bagi perwakilan binari setiap nombor daripada 0 hingga n.

Penyelesaian pertama yang saya hasilkan ialah mencipta tatasusunan panjang n 1, isikan dengan nilai dari 0 hingga n dalam binari...

const arr = Array.from({ length: n + 1 }, (_, i) => i.toString(2));
Salin selepas log masuk

...dan petakan setiap satu kepada bilangan 1 bit yang ada:

arr.map(j => {
  let result = 0;
  let binaryNumber = parseInt(j, 2);
  while (binaryNumber > 0) {
    binaryNumber &= binaryNumber - 1;
    result++;
  }
  return result;
});
Salin selepas log masuk

Perhatikan bahawa dalam masalah sebelumnya, kami menggunakan teknik untuk mengira bilangan 1 bit (atau mengira Berat Hamming) — ia hanya mengurangkan satu nilai yang lebih rendah daripada nombor sehingga ia mencapai 0:

let numberOf1Bits = 0;
while (binaryNumber > 0) {
  binaryNumber &= binaryNumber - 1;
  numberOf1Bits++;
}
Salin selepas log masuk

Kami boleh merantai kaedah, dan secara keseluruhan, penyelesaiannya kelihatan seperti ini:

function countBits(n: number): number[] {
  return Array.from({ length: n + 1 }, (_, i) => i.toString(2)).map(j => {
    let result = 0;
    let binaryNumber = parseInt(j, 2);
    while (binaryNumber > 0) {
      binaryNumber &= binaryNumber - 1;
      result++;
    }
    return result;
  });
}
Salin selepas log masuk

Atau, kita boleh menulisnya dengan lebih jelas, menolak setiap kiraan ke tatasusunan hasil:

Input: n = 2
Output: [0, 1, 1]

Explanation:
0 --> 0
1 --> 1
2 --> 10
Salin selepas log masuk

Kerumitan masa dan ruang

Mengira bit set mempunyai log nlog n log n kerumitan masa (dalam kes paling teruk apabila semua bit ditetapkan, gelung akan menjalankan bilangan bit dalam binaryNumber — bilangan bit perwakilan binari nombor nn n ialah log nlog n log n ).
Walau bagaimanapun, kami juga melakukannya nn n kali, jadi secara keseluruhan, kerumitan masa akan menjadi O(n log n)O(n log n) O(n log n) .

Kerumitan ruang adalah O(n)O(n) O(n) kerana keperluan untuk ruang untuk tatasusunan hasil kami meningkat apabila nn n bertambah.


Seterusnya, kita akan melihat Bit Songsang. Sehingga itu, selamat mengekod.

Atas ialah kandungan terperinci Meditasi LeetCode: Mengira Bit. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan