1829. Maximales XOR für jede Abfrage
Schwierigkeit:Mittel
Themen: Array, Bitmanipulation, Präfixsumme
Sie erhalten ein sortiertes Array mit n nicht negativen Ganzzahlen und einem ganzzahligen MaximumBit. Sie möchten die folgende Abfrage n mal durchführen:
Gib eine Array-Antwort zurück, wobei Antwort[i] die Antwort auf die iteAbfrage ist.
Beispiel 1:
Beispiel 2:
Beispiel 3:
Einschränkungen:
Hinweis:
Lösung:
Wir müssen das XOR der Elemente im Array effizient berechnen und das Ergebnis mit einem Wert k maximieren, sodass k kleiner als 2^maximumBit ist. Hier ist der Ansatz zur Lösung dieses Problems:
XOR maximieren:
Die maximale Anzahl, die wir mit jeder Präfixsumme für MaximumBit-Bits XOR-verknüpfen können, ist ( 2^{text{maximumBit}} - 1 ). Dies liegt daran, dass die XOR-Verknüpfung mit einer Zahl, die nur aus Einsen besteht (d. h. 111...1 im Binärformat), das Ergebnis immer maximiert.
Präfix-XOR-Berechnung:
Anstatt das XOR für jede Abfrage neu zu berechnen, können wir ein kumulatives XOR für das gesamte Array verwalten. Da XOR die Eigenschaft hat, dass A XOR B
:
Berechnen Sie zunächst das XOR aller Elemente in Zahlen. Nennen wir das currentXOR.
- MaxNum berechnen
:
maxNum wird als 2^maximumBit - 1 berechnet, was die Zahl mit allen Einsen im Binärformat für die angegebene Bitlänge ist.
- Erste XOR-Berechnung
:
Wir XORen alle Elemente in Zahlen, um das kumulative XOR (currentXOR) zu erhalten, das das XOR aller Zahlen im Array darstellt.
- Rückwärts iterieren
:
Wir beginnen mit dem letzten Element in Zahlen und berechnen das maximale XOR für jeden Schritt:
- currentXOR ^ maxNum gibt das maximale k für den aktuellen Zustand an.
Wir XORen dann das letzte Element von nums mit currentXOR, um es für die nächste Iteration aus der XOR-Summe zu „entfernen“.
- K an die Antwort anhängen.
- Antwort zurückgeben
Komplexitätsanalyse:
Da wir die Liste umgekehrt verarbeitet haben, enthält die Antwort die Werte in umgekehrter Reihenfolge, sodass die endgültige Liste bereits korrekt für unsere Anforderungen angeordnet ist.
Wenn Sie diese Serie hilfreich fanden, denken Sie bitte darüber nach, dem Repository einen Stern auf GitHub zu geben oder den Beitrag in Ihren bevorzugten sozialen Netzwerken zu teilen? Ihre Unterstützung würde mir sehr viel bedeuten! Wenn Sie weitere hilfreiche Inhalte wie diesen wünschen, folgen Sie mir gerne:
Das obige ist der detaillierte Inhalt vonMaximales XOR für jede Abfrage. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!