Inhaltsverzeichnis
Beispiel
Anleitung
Methode 2
Algorithmus
Ausgabe
Fazit
Heim Backend-Entwicklung C++ Längste nicht ansteigende Teilsequenz in einer Binärzeichenfolge

Längste nicht ansteigende Teilsequenz in einer Binärzeichenfolge

Sep 07, 2023 pm 11:13 PM
二进制字符串 最长 nicht zunehmende Teilfolge

Längste nicht ansteigende Teilsequenz in einer Binärzeichenfolge

In diesem Problem müssen wir die längste nicht zunehmende Teilfolge einer bestimmten Zeichenfolge finden.

Nicht aufsteigend bedeutet, dass die Zeichen entweder gleich oder in absteigender Reihenfolge sind. Da Binärzeichenfolgen nur „0“ und „1“ enthalten, sollte die resultierende Zeichenfolge entweder mit „1“ beginnen und mit „0“ enden oder mit „0“ oder „1“ beginnen und enden.

Um dieses Problem zu lösen, zählen wir das Präfix „1“ und das Suffix „0“ an jeder Position der Zeichenfolge und ermitteln die maximale Summe aus dem Präfix „1“ und dem Suffix „0“.

Problemstellung - Wir erhalten eine binäre Zeichenfolge str. Wir müssen die längste nicht zunehmende Teilsequenz aus der gegebenen Zeichenfolge finden.

Beispiel

Input –  str = "010100"
Nach dem Login kopieren
Output – 4
Nach dem Login kopieren

Anleitung

Die längste nicht ansteigende Teilsequenz ist „1100“.

Input –  str = "010110010"
Nach dem Login kopieren
Output – 6
Nach dem Login kopieren

Anleitung

Die längste nicht ansteigende Teilsequenz ist „111000“.

Input –  str = ‘00000000’
Nach dem Login kopieren
Output – 8
Nach dem Login kopieren

Anleitung

Die längste nicht ansteigende Teilsequenz ist „00000000“, was der angegebenen Zeichenfolge entspricht.

Methode 1

In dieser Methode speichern wir die Anzahl des Präfixes „1“ und des Suffixes „0“ für jeden Index im Array. Danach erhalten wir die Werte aus demselben Index in beiden Arrays, addieren sie und ermitteln die maximale Summe.

Algorithmus

  • Schritt 1 – Definieren Sie pre1s- und suffix0s-Arrays, um Präfix 1 und Suffix 0 zu speichern. Initialisieren Sie außerdem alle Array-Elemente auf 0.

  • Schritt 2 – Verwenden Sie eine for-Schleife, um die Zeichenfolge zu durchlaufen und das Präfix 1 für jeden Index zu berechnen. Wenn i > 0, wird der Wert des vorherigen Elements zum aktuellen Element addiert.

  • Schritt 3 – Wenn das aktuelle Zeichen „1“ ist, addieren Sie 1 zum aktuellen Wert von pre1s[i].

  • Schritt 4 – Zählen Sie nun das Suffix 0 in der angegebenen Zeichenfolge. Durchlaufen Sie die Zeichenfolge vom Ende beginnend.

  • Schritt 5 – Wenn der Wert von „I“ nicht gleich „n – 1“ ist, dann ermitteln Sie den Wert des Elements „I + 1“ und addieren Sie ihn zum aktuellen Element.

  • Schritt 6 – Wenn das aktuelle Element „0“ ist, addieren Sie 1 zum aktuellen Element.

  • Schritt 7 – Initialisieren Sie nun die Variable „res“ mit 0.

  • Schritt 8 – Mit einer Schleife über „pre1s“ und „suffix0s“ iterieren.

  • Schritt 9 – Holen Sie sich den Wert aus dem i-ten Index in den Arrays „pre1s“ und „suffix0s“ und addieren Sie sie. Wenn „sum“ außerdem größer als der aktuelle Wert der Variablen „res“ ist, wird der Wert der Variable „res“ durch den Wert „sum“ geändert.

  • Schritt 10 – Geben Sie den Wert der Variablen „res“ zurück.

Beispiel

Für die Eingabe „010100“ ist das Präfix-Array [0, 1, 1, 2, 2, 2] und das Suffix-0-Array [4, 3, 3, 2, 2, 1]. Das Summenarray ist [4, 4, 4, 4, 4, 1] und der Maximalwert im Summenarray ist 4. Daher lautet die Antwort 4.

#include <bits/stdc++.h>
using namespace std;
int getMaxLength(string str, int n){
   // To store the prefix count of '1's and suffix count of '0's
   int pre1s[n] = {0},
      suffix0s[n] = {0};
   for (int i = 0; i < n; i++){
   
      // get the prefix count of '1's
      if (i > 0){
         pre1s[i] += pre1s[i - 1];
      }
      
      // If the current character is '1', then update the pre1s array by adding 1; else, keep it as it is.
      if (str[i] == '1'){
         pre1s[i] += 1;
      }
   }
   
   // get suffix count of '0's
   for (int i = n - 1; i >= 0; i--) {
   
      // add the suffix count of '0's
      if (i != n - 1)
         suffix0s[i] += suffix0s[i + 1];
         
      // If the current character is '0', then update the suffix0s array by adding 1; else, keep it as it is.
      if (str[i] == '0')
         suffix0s[i] += 1;
   }
   
   // to store the final result value
   int res = 0;
   
   // iterate over the pre1s[] and suffix0s[] array and find the maximum value of pre1s[i] + suffix0s[i]
   for (int i = 0; i < n; i++){
      res = max(res, pre1s[i] + suffix0s[i]);
   }
   
   // Return the result
   return res;
}

// Driver Code
int main(){
   string str = "010100";
   int N = str.length();
   cout << "The length of the longest non-increasing subsequence in the given binary string is - " << getMaxLength(str, N);
   return 0;
}
Nach dem Login kopieren

Ausgabe

The length of the longest non-increasing subsequence in the given binary string is - 4
Nach dem Login kopieren

Zeitkomplexität – O(N), da wir das Array mit Präfix 1 und Suffix 0 initialisieren müssen.

Raumkomplexität – O(N), da wir Präfix 1 und Suffix 0 im Array speichern

Methode 2

Bei dieser Methode zählen wir zunächst die Gesamtzahl der Nullen. Danach beginnen wir mit der Iteration durch die Zeichenfolge, zählen weiterhin „1“-Werte und dekrementieren den Wert um „0“, wenn eine 0 gefunden wird. Zusätzlich addieren wir in jeder Iteration die Anzahl von 0 und 1 und ermitteln den maximalen resultierenden Wert.

Algorithmus

  • Schritt 1 – Definieren Sie die Variablen „count1“, „count0“ und „res“ und initialisieren Sie sie mit 0, um die Anzahl und das Endergebnis von 1 bzw. 0 zu speichern.

  • Schritt 2 – Zählen Sie die Gesamtzahl der Nullen, indem Sie die Zeichenfolge durchlaufen und sie in der Variablen „count0“ speichern.

  • Schritt 3 – Nun iterieren Sie mit einer Schleife über die Zeichenfolge.

  • Schritt 4 – Wenn in der Schleife das aktuelle Zeichen „1“ ist, erhöhen Sie den Wert von „count1“ um 1, andernfalls verringern Sie den Wert von „count0“ um 1.

  • Schritt 5 – Speichern Sie außerdem den Maximalwert aus „res“ und „count0 + count1“ in der Variablen „res“.

  • Schritt 6 – Wenn die Schleife endet, geben Sie den Wert der Variablen „res“ zurück.

Beispiel

#include <bits/stdc++.h>
using namespace std;
int getMaxLength(string str, int n){
   int count1 = 0, count0 = 0;
   int res = 0;
   // counting total zeros in the string
   for (int i = 0; i < n; i++){
      if (str[i] == '0')
         count0++;
   }
   
   // counting 1s from left, subtracting zeros from total zeros and adding both counts.
   for (int i = 0; i < n; i++){
      if (str[i] == '1')
         count1++;
      else
         count0--;
      res = max(res, count1 + count0);
   }
   return res;
}
int main(){
   string str = "010110010";
   int N = str.length();
   cout << "The length of the longest non-increasing subsequence in the given binary string is - " << getMaxLength(str, N);
   return 0;
}
Nach dem Login kopieren

Ausgabe

The length of the longest non-increasing subsequence in the given binary string is - 6
Nach dem Login kopieren

Zeitkomplexität – O(N), da wir die Gesamtzahl der Nullen in der Zeichenfolge zählen und die Zeichenfolge durchlaufen, um die längste Teilsequenz zu finden.

Raumkomplexität – O(1)

Fazit

Hier haben beide Methoden die gleiche Zeitkomplexität, aber unterschiedliche räumliche Komplexität. Die zweite Methode verwendet konstanten Speicherplatz, wenn wir den Code optimieren, aber die erste Methode verwendet dynamischen Speicherplatz, um die Gesamtzahl von Präfix 1 und Suffix 0 zu speichern.

Das obige ist der detaillierte Inhalt vonLängste nicht ansteigende Teilsequenz in einer Binärzeichenfolge. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Wie kann ich den Zeitpunkt überprüfen, zu dem Xiaohongshu ein Video veröffentlicht hat? Wie lange dauert es am längsten, ein Video zu veröffentlichen? Wie kann ich den Zeitpunkt überprüfen, zu dem Xiaohongshu ein Video veröffentlicht hat? Wie lange dauert es am längsten, ein Video zu veröffentlichen? Mar 21, 2024 pm 04:26 PM

Als Lifestyle-Sharing-Plattform ist Xiaohongshu der Ort, an dem immer mehr Nutzer ihre eigenen Videoinhalte veröffentlichen und ihr tägliches Leben mit anderen Nutzern teilen. Viele Benutzer stoßen beim Posten von Videos möglicherweise auf ein Problem: Wie kann man die Zeit überprüfen, zu der sie oder andere Videos gepostet haben? 1. Wie kann ich den Zeitpunkt überprüfen, zu dem Xiaohongshu ein Video veröffentlicht hat? 1. Überprüfen Sie den Zeitpunkt, zu dem Sie das Video gepostet haben. Um den Zeitpunkt zu überprüfen, zu dem Sie das Video gepostet haben, müssen Sie zunächst die Xiaohongshu-App öffnen und sich bei Ihrem persönlichen Konto anmelden. Unten auf der Benutzeroberfläche der persönlichen Homepage gibt es eine Option mit der Bezeichnung „Erstellung“. Nachdem Sie zum Betreten geklickt haben, wird eine Spalte mit dem Namen „Video“ angezeigt. Hier können Sie eine Liste aller veröffentlichten Videos durchsuchen und einfach überprüfen, wann sie veröffentlicht wurden. Nach dem Klicken befindet sich in der oberen rechten Ecke jedes Videos die Schaltfläche „Details anzeigen“.

Längste nicht ansteigende Teilsequenz in einer Binärzeichenfolge Längste nicht ansteigende Teilsequenz in einer Binärzeichenfolge Sep 07, 2023 pm 11:13 PM

Bei diesem Problem müssen wir die längste nicht zunehmende Teilfolge einer gegebenen Zeichenfolge finden. Nicht aufsteigend bedeutet, dass die Zeichen entweder gleich oder in absteigender Reihenfolge sind. Da Binärzeichenfolgen nur „0“ und „1“ enthalten, sollte die resultierende Zeichenfolge entweder mit „1“ beginnen und mit „0“ enden oder mit „0“ oder „1“ beginnen und enden. Um dieses Problem zu lösen, zählen wir das Präfix „1“ und das Suffix „0“ an jeder Position der Zeichenfolge und ermitteln die maximale Summe aus Präfix „1“ und Suffix „0“. Problemstellung: Wir erhalten eine binäre Zeichenfolge str. Wir müssen die längste nicht zunehmende Teilsequenz aus der gegebenen Zeichenfolge finden. Beispiel Input–str="010100"Output–4 veranschaulicht die längste nicht-rekursive Methode

Ermitteln Sie in C++ die Anzahl der eindeutigen Permutationen einer Binärzeichenfolge, die mit 1 beginnt Ermitteln Sie in C++ die Anzahl der eindeutigen Permutationen einer Binärzeichenfolge, die mit 1 beginnt Sep 05, 2023 am 09:01 AM

In der gegebenen Aufgabe erhalten wir eine Zeichenfolge bestehend aus 0 und 1; wir müssen die Gesamtzahl aller Permutationen ermitteln, die mit 1 beginnen. Da die Antwort eine große Zahl sein kann, nehmen wir sie modulo 1000000007 und geben sie aus. Input:str="10101001001"Output:210Input:str="101110011"Output:56 Wir werden dieses Problem lösen, indem wir kombinatorische Mathematik anwenden und einige Formeln aufstellen. Lösungsmethode Bei dieser Methode zählen wir die Anzahl der Nullen und Einsen. Angenommen, n ist die Anzahl der Einsen, die in unserer Zeichenfolge erscheinen, und m ist die Anzahl der Nullen, die in unserer Zeichenfolge erscheinen

In PHP besteht die Funktion der Funktion pack() darin, Daten in eine Binärzeichenfolge umzuwandeln In PHP besteht die Funktion der Funktion pack() darin, Daten in eine Binärzeichenfolge umzuwandeln Aug 31, 2023 pm 02:05 PM

Die Funktion pack() packt Daten in eine Binärzeichenfolge. Syntax pack(format,args) Parameter format – das zu verwendende Format. Die folgenden Werte sind möglich: a – mit NUL aufgefüllte Zeichenfolge A – mit Leerzeichen aufgefüllte Zeichenfolge h – hexadezimale Zeichenfolge, niedriges Nibble zuerst H – hexadezimale Zeichenfolge, hohes Nibble zuerst c – vorzeichenbehaftetes Zeichen C – vorzeichenloses Zeichen s – vorzeichenbehaftetes Kurzzeichen (immer 16 Bit). , Maschinenbyte-Reihenfolge) S – unsigned short (immer 16 Bit, Maschinenbyte-Reihenfolge) n – unsigned short (immer 16 Bit, Big-Endian-Bytereihenfolge) v – unsigned short (immer 16 Bit, Little-Endian-Bytereihenfolge) i – vorzeichenbehaftete Ganzzahl (hängt von der Maschinengröße und der Byte-Reihenfolge ab) I – Keine vorzeichenbehaftete Ganzzahl (abhängig von

Prüft, ob eine Zeichenfolge durch Vertauschen von Zeichenpaaren an Indizes mit ungleichen Zeichen in einer Binärzeichenfolge eine Palindromzeichenfolge bilden kann Prüft, ob eine Zeichenfolge durch Vertauschen von Zeichenpaaren an Indizes mit ungleichen Zeichen in einer Binärzeichenfolge eine Palindromzeichenfolge bilden kann Sep 02, 2023 pm 08:09 PM

Problemstellung: Wir haben einen String str und einen binären String B. Die Länge beider Saiten ist gleich N. Wir müssen prüfen, ob wir String str zu einem Palindrom-String machen können, indem wir seine Zeichen mehrmals auf jedem Indexpaar austauschen, das ungleiche Zeichen in String B enthält. Beispiel Beispiel Eingabe str='AAS' B='101' Ausgabe 'JA' Die chinesische Übersetzung von Erläuterung lautet: Erläuterung Wir können str[1] und str[2] austauschen, da B[1] und B[2] nicht gleich sind . Die letzte Zeichenfolge kann „ASA“ sein. Eingabe str='AASS' B='1111' und Ausgabe 'Nein'. Die chinesische Übersetzung von Erklärung lautet: Erklärung, dass wir den String nicht palindromieren können,

Maximieren Sie die angegebene Funktion, indem Sie Teilzeichenfolgen gleicher Länge aus der angegebenen Binärzeichenfolge auswählen Maximieren Sie die angegebene Funktion, indem Sie Teilzeichenfolgen gleicher Länge aus der angegebenen Binärzeichenfolge auswählen Aug 28, 2023 am 09:49 AM

Bei zwei Binärzeichenfolgen str1 und str2 gleicher Länge müssen wir den gegebenen Funktionswert maximieren, indem wir Teilzeichenfolgen aus den gegebenen Zeichenketten gleicher Länge auswählen. Die angegebene Funktion sieht folgendermaßen aus: fun(str1,str2)=(len(substring))/(2^xor(sub1,sub2)). Hier ist len(substring) die Länge des ersten Teilstrings und xor(sub1,sub2) das XOR des gegebenen Teilstrings. Dies ist möglich, da es sich um binäre Strings handelt. Beispiel Input1:stringstr1=10110&stringstr2=11101Output:3 veranschaulicht unsere

Finden Sie den Player mit der geringsten Anzahl an Nullen, nachdem Sie eine Binärzeichenfolge geleert haben (durch Entfernen nicht leerer Teilzeichenfolgen). Finden Sie den Player mit der geringsten Anzahl an Nullen, nachdem Sie eine Binärzeichenfolge geleert haben (durch Entfernen nicht leerer Teilzeichenfolgen). Sep 16, 2023 am 10:21 AM

In diesem Artikel werden wir ein interessantes Problem im Zusammenhang mit dem Bereich der String-Manipulation und der Spieltheorie diskutieren: „Leeren Sie einen binären String, indem Sie nicht leere Teilstrings entfernen, und finden Sie den Spieler mit den wenigsten verbleibenden Nullen.“ Diese Frage untersucht das Konzept der Verwendung binärer Zeichenfolgen für Wettkampfspiele. Unser Ziel ist es, den Spieler zu finden, der am Ende des Spiels die wenigsten 0 übrig hat. Wir werden dieses Problem diskutieren, eine C++-Codeimplementierung bereitstellen und das Konzept anhand eines Beispiels erläutern. Die Problemstellung verstehen Zwei Spieler erhalten eine Binärzeichenfolge und spielen abwechselnd das Spiel. In jedem Zug entfernt der Spieler nicht leere Teilzeichenfolgen, die mindestens eine „1“ enthalten. Das Spiel endet, wenn die Zeichenfolge leer ist oder keine „1“ in der Zeichenfolge vorhanden ist. Spieler, die nicht in der Lage sind, Maßnahmen zu ergreifen, verlieren das Spiel. Die Aufgabe besteht darin, die endgültige 0 zu finden

Berechnen Sie binäre Zeichenfolgen der Länge N, die wiederholte Verkettungen von Teilzeichenfolgen sind Berechnen Sie binäre Zeichenfolgen der Länge N, die wiederholte Verkettungen von Teilzeichenfolgen sind Sep 07, 2023 am 10:13 AM

Der Zweck dieses Artikels besteht darin, ein Programm zum Zählen der Anzahl binärer Zeichenfolgen der Länge N zu implementieren, die durch wiederholte Verkettung einer Teilzeichenfolge gebildet werden. Das Ziel besteht darin, zu bestimmen, wie viele Binärzeichenfolgen der Länge N durch wiederholtes Verketten einzelner Teilzeichenfolgen des gegebenen Textes erstellt werden können, wobei N eine positive ganze Zahl ist. Problemstellung: Implementieren Sie ein Programm, das die Anzahl der binären Zeichenfolgen der Länge N zählt, die wiederholt Teilzeichenfolgen verketten. Beispiel Beispiel 1 Nehmen wir die Eingabe, N = 3. Ausgabe: 2. Die chinesische Übersetzung von Explanation lautet: Explanation. Im Folgenden werden mögliche binäre Zeichenfolgen der Länge N = 3 aufgeführt, in denen eine Teilzeichenfolge wiederholt verkettet wird. „000“:Thesubstr

See all articles