Heim > Web-Frontend > js-Tutorial > LeetCode-Meditationen: Bits zählen

LeetCode-Meditationen: Bits zählen

Barbara Streisand
Freigeben: 2024-12-27 16:41:10
Original
710 Leute haben es durchsucht

LeetCode Meditations: Counting Bits

Die Beschreibung für Counting Bits lautet:

Gegeben eine ganze Zahl n, gib ein Array ans der Länge n 1 zurück so dass für jedes i (0 <= i <= n) , ans[i] ist die Nummer von 1's in der binären Darstellung von i.

Zum Beispiel:

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

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




</p>
<p>Oder:<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
Nach dem Login kopieren

Das Problem möchte, dass wir die Anzahl der Einsen der binären Darstellung jeder Zahl von 0 bis n erhalten.

Die erste Lösung, die ich mir ausgedacht habe, bestand darin, ein Array der Länge n 1 zu erstellen und es mit binären Werten von 0 bis n zu füllen...

const arr = Array.from({ length: n + 1 }, (_, i) => i.toString(2));
Nach dem Login kopieren

...und ordne jedes einzelne der Anzahl von 1-Bits zu, die es hat:

arr.map(j => {
  let result = 0;
  let binaryNumber = parseInt(j, 2);
  while (binaryNumber > 0) {
    binaryNumber &= binaryNumber - 1;
    result++;
  }
  return result;
});
Nach dem Login kopieren

Beachten Sie, dass wir im vorherigen Problem eine Technik verwendet haben, um die Anzahl der 1-Bits zu zählen (oder ihr Hamming-Gewicht zu berechnen) – dabei wird einfach ein kleinerer Wert von der Zahl verringert, bis sie erreicht ist 0:

let numberOf1Bits = 0;
while (binaryNumber > 0) {
  binaryNumber &= binaryNumber - 1;
  numberOf1Bits++;
}
Nach dem Login kopieren

Wir können die Methoden verketten und insgesamt sieht die Lösung so aus:

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;
  });
}
Nach dem Login kopieren

Oder wir können es expliziter schreiben und jede Zählung in das Ergebnisarray übertragen:

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

Explanation:
0 --> 0
1 --> 1
2 --> 10
Nach dem Login kopieren

Zeit- und Raumkomplexität

Das Zählen der gesetzten Bits hat log nlog n log n Zeitkomplexität (im schlimmsten Fall, wenn alle Bits gesetzt sind, führt die Schleife die Anzahl der Bits in „binaryNumber“ aus – die Anzahl der Bits der binären Darstellung von Zahl nn n Ist log nlog n log n ).
Wir machen es aber auch nn n Zeiten, also insgesamt wird die Zeitkomplexität sein O(n log n)O(n log n) O(n log n) .

Die räumliche Komplexität ist O(n)O(n) O(n) da der Platzbedarf für unser Ergebnisarray zunimmt nn n erhöht.


Als nächstes werfen wir einen Blick auf Reverse Bits. Bis dahin viel Spaß beim Codieren.

Das obige ist der detaillierte Inhalt vonLeetCode-Meditationen: Bits zählen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage