Heim > Backend-Entwicklung > C++ > Hauptteil

Mindestanzahl von nicht benachbarten Paarwechseln, die erforderlich sind, um alle Nullen in einer Binärzeichenfolge zu entfernen

WBOY
Freigeben: 2023-09-04 13:09:06
nach vorne
694 Leute haben es durchsucht

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.

Algorithmus

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++.

Beispiel

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

Ausgabe

3
Nach dem Login kopieren

Codebeschreibung

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

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

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

Testfallbeispiel

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.

Fazit

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!

Verwandte Etiketten:
Quelle:tutorialspoint.com
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!