Heim >Backend-Entwicklung >C++ >Mindestanzahl von nicht benachbarten Paarwechseln, die erforderlich sind, um alle Nullen in einer Binärzeichenfolge zu entfernen
In einer binären Zeichenfolge kann durch das Umdrehen eines Paares benachbarter Bits leicht eine einzelne 0 aus der Zeichenfolge entfernt werden. Wenn wir jedoch alle Nullen aus einer Binärzeichenfolge entfernen müssen, müssen wir möglicherweise auch nicht benachbarte Bitpaare umdrehen. In diesem Artikel besprechen wir, wie man die Mindestanzahl nicht benachbarter Paarumdrehungen bestimmt, die erforderlich sind, um alle Nullen aus einer Binärzeichenfolge zu entfernen.
Um dieses Problem zu lösen, verwenden wir einen einfachen Greedy-Algorithmus. Die Idee besteht darin, immer das Bitpaar zu wählen, das am weitesten voneinander entfernt ist und zwischen dem mindestens eine 0 liegt. Wir können diese beiden Bits dann umdrehen und so effektiv eine 0 aus der Zeichenfolge entfernen. Wir wiederholen diesen Vorgang, bis alle Nullen entfernt wurden.
Jetzt implementieren wir diesen Algorithmus in C++.
#include <iostream> #include <cstring> using namespace std; int main() { string s; s="100101000"; int n = s.size(); int cnt = 0; for (int i = 0; i < n; i++) { if (s[i] == '0') { cnt++; if (i+2 < n && s[i+2] == '0') { i += 2; } else { i++; } } } cout << cnt << endl; return 0; }
3
Der obige Code verwendet eine Binärzeichenfolge als Eingabe und berechnet die Mindestanzahl nicht benachbarter Paarumdrehungen, die erforderlich sind, um alle Nullen aus der Zeichenfolge zu entfernen. Schauen wir uns nun den Code im Detail an.
Zuerst nehmen wir einen binären String als Eingabe und speichern ihn in der String-Variablen „s“. Wir speichern die Größe des Strings auch in einer Integer-Variablen „n“.
string s; cin >> s; int n = s.size();
Als nächstes initialisieren wir die Variable „cnt“, um die Anzahl der Nullen in der Zeichenfolge zu speichern. Anschließend iterieren wir mithilfe einer for-Schleife über die Zeichenfolge. Für jede angetroffene Null erhöhen wir die Anzahl der Nullen und prüfen, ob die nächsten beiden Bits ebenfalls Nullen sind. Wenn ja, kehren wir das Bitpaar um, indem wir den Index um 2 erhöhen. Andernfalls spiegeln wir nur benachbarte Bitpaare um, indem wir den Index um 1 erhöhen.
int cnt = 0; for (int i = 0; i < n; i++) { if (s[i] == '0') { cnt++; if (i+2 < n && s[i+2] == '0') { i += 2; } else { i++; } } }
Schließlich geben wir die Anzahl der Umdrehungen nicht benachbarter Paare aus, die erforderlich sind, um alle Nullen aus der Zeichenfolge zu entfernen.
cout << cnt << endl;
Betrachten wir die Binärzeichenfolge „100101000“. Die Mindestanzahl von nicht benachbarten Paarumdrehungen, die erforderlich sind, um alle Nullen aus dieser Zeichenfolge zu entfernen, kann mit dem obigen Algorithmus berechnet werden.
Zuerst treffen wir auf 0 auf Position 2. Wir drehen das (1,3)-Paar um, um die Zeichenfolge „110101000“ zu erhalten. Dann stoßen wir auf die nächste 0 an Position 5. Wir drehen das (1,7)-Paar um, um die Zeichenfolge „111101000“ zu erhalten. Dann stoßen wir auf die nächste 0 an Position 8. Wir drehen das (1,9)-Paar um, um die Zeichenfolge „111111000“ zu erhalten. Jetzt wurden alle Nullen aus der Zeichenfolge entfernt.
Die Anzahl der Umdrehungen nicht benachbarter Paare, die erforderlich sind, um alle Nullen aus einer Zeichenfolge zu entfernen, beträgt 3. Wir können dies überprüfen, indem wir den obigen C++-Code für die Eingabezeichenfolge „100101000“ ausführen.
In diesem Artikel haben wir besprochen, wie man die Mindestanzahl nicht benachbarter Paarumdrehungen bestimmt, die erforderlich sind, um alle Nullen aus einer Binärzeichenfolge zu entfernen. Wir verwenden einen einfachen Greedy-Algorithmus, um dieses Problem zu lösen und ihn in C++-Code zu implementieren. Wir stellen auch einen Beispieltestfall zur Verfügung, um die Funktionsweise des Algorithmus zu veranschaulichen.
Das obige ist der detaillierte Inhalt vonMindestanzahl von nicht benachbarten Paarwechseln, die erforderlich sind, um alle Nullen in einer Binärzeichenfolge zu entfernen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!