Table des matières
Énoncé du problème
Exemple
Entrez
Sortie
Instructions
Méthode 2
Algorithme
Conclusion
Maison développement back-end C++ Nombre minimum de mouvements requis pour placer tous les 0 avant les 1 dans une chaîne binaire

Nombre minimum de mouvements requis pour placer tous les 0 avant les 1 dans une chaîne binaire

Sep 23, 2023 pm 01:29 PM
chaîne binaire Nombre de mouvements lieu et

Nombre minimum de mouvements requis pour placer tous les 0 avant les 1 dans une chaîne binaire

Énoncé du problème

On nous donne une chaîne binaire str et on nous demande de supprimer le nombre minimum de caractères de la chaîne afin que nous puissions mettre tous les zéros avant les uns.

Exemple

Entrez

str = ‘00110100111’
Copier après la connexion

Sortie

3
Copier après la connexion

Instructions

Ici, nous pouvons atteindre le résultat 3 de deux manières.

Nous pouvons supprimer arr[2], arr[3] et arr[5] ou arr[4], arr[6] et arr[7] de la chaîne.

Entrez

str = ‘001101011’
Copier après la connexion

Sortie

2
Copier après la connexion

Instructions

Nous pouvons supprimer arr[4] et arr[6] et mettre tous les zéros avant les uns.

Entrez

str = ‘000111’
Copier après la connexion

Sortie

0
Copier après la connexion

Instructions

Dans la chaîne donnée, tous les zéros ont été placés avant 1, nous n'avons donc pas besoin de supprimer aucun caractère de la chaîne donnée.

Méthode 1

Dans la première méthode, nous utiliserons deux tableaux. Le premier tableau stocke tous les 1 à gauche et l’autre tableau stocke tous les 0 à droite. Après cela, nous pouvons ajouter les éléments au i-ème index dans les deux tableaux et trouver la somme minimale.

Algorithme

  • Étape 1 - Définissez une liste nommée de zéros et de uns de longueur n, où n est la longueur de la chaîne que nous pouvons obtenir en utilisant la méthode size(). < /p>

  • Étape 2 - Si le premier caractère de la chaîne donnée est "1", stockez 1 au 0ème index du tableau "ones" sinon, stockez 0.

  • Étape 3 - Utilisez une boucle for pour parcourir à partir du deuxième élément de la chaîne. Dans la boucle for, Ones[i] est initialisé avec la valeur obtenue en ajoutant Ones[i-1] à 1 ou 0 en fonction du caractère de la chaîne à l'index i.

  • Étape 4 - Stockez 1 ou 0 à Zeros[n-1] en fonction du dernier caractère de la chaîne donnée.

  • Étape 5 - Utilisez une boucle for pour parcourir la chaîne à partir du caractère de la dernière seconde et mettre à jour la valeur de la liste zéro en fonction des caractères de la chaîne.

    < /里>
  • Étape 6 - Définissez la variable "min_zeros_to_remove" et initialisez-la avec la valeur entière maximale.

  • Étape 7 - Maintenant, parcourez les listes « zéro » et « un ». Accédez aux valeurs de l'index "i+1" dans la liste zéro et de l'index "I" dans la liste "un". Après cela, ajoutez ces deux éléments.

  • Étape 8 - Si la valeur de "min_zeros_to_remove" est inférieure à la valeur actuelle de la variable "min_zeros_to_remove", modifiez sa valeur par la somme des deux éléments du tableau.

    < /里>
  • Étape 9 - Renvoyez la valeur du résultat.

Exemple

#include <bits/stdc++.h>
using namespace std;

int minimumZeroRemoval(string str){
   int n = str.size();
   // arrays to store the prefix sums of zeros and ones
   vector<int> zeros(n);
   vector<int> ones(n);
   // compute total number of 1s at the left of each index
   ones[0] = (str[0] == '1') ? 1 : 0;
   for (int i = 1; i < n; i++) {
      ones[i] = ones[i - 1] + ((str[i] == '1') ? 1 : 0);
   }
   // compute total number of 0s at the right of each index
   zeros[n - 1] = (str[n - 1] == '0') ? 1 : 0;
   for (int i = n - 2; i >= 0; i--){
      zeros[i] = zeros[i + 1] + ((str[i] == '0') ? 1 : 0);
   }
   // do the sum of zeros and ones for each index and return the minimum value
   int min_zeros_to_remove = INT_MAX;
   for (int i = 0; i < n - 1; i++){
      min_zeros_to_remove = min(min_zeros_to_remove, zeros[i + 1] + ones[i]);
   }
   return min_zeros_to_remove;
}
int main() {
   string str = "00110100111";
   int count = minimumZeroRemoval(str);
   cout << "The minimum number of zeros required to remove from the given string is - " << count;
   return 0;
}
Copier après la connexion

Sortie

The minimum number of zeros required to remove from the given string is - 3
Copier après la connexion
  • Complexité temporelle - O(N) car nous avons besoin d'une boucle pour parcourir des chaînes et des listes de taille N.

  • Space Complexity - O(N) car nous utilisons deux listes pour stocker les comptes de 1 et 0.

Méthode 2

Cette méthode est une version optimisée de la première méthode. Ici, au lieu d'une liste, nous utilisons deux variables pour stocker le nombre de 1 et de 0.

Algorithme

  • Étape 1 - Définissez la variable "zeros_right" et initialisez-la à 0.

  • Étape 2 - Parcourez la chaîne, comptez le nombre total de caractères "0" dans la chaîne donnée et mettez à jour la valeur de la variable "zero_right" en conséquence. < /p>

  • Étape 3 - Définissez la variable "ones_left" et initialisez-la à 0.

  • Étape 4 - Utilisez une boucle for pour parcourir la chaîne. Si le caractère à l'index i dans la chaîne est "1", augmentez la valeur de la variable "ones_left" de 1. Sinon, réduisez la valeur de la variable "zeros_right" de 1.

  • Étape 5 - Si "zeros_right + Ones_left" est inférieur à la valeur actuelle de la variable "res", mettez à jour la valeur de la variable "res".

Exemple

#include <bits/stdc++.h>
using namespace std;

// function to remove zeros from the string to place all zeros before 1.
int minimumZeroRemoval(string str){
   // counting the total number of zeros in the given string
   int zeros_right = 0;
   for (int i = 0; i < str.size(); i++) {
      if (str[i] == '0')
      zeros_right += 1;
   }
   // variable to store the number of ones from left
   int ones_left = 0;
   // Size of the string
   int len = str.size();
   // variable to store the final result
   int result = INT_MAX;
   // Traverse the string from left to right
   for (int i = 0; i < len; i++){
      // If the current character is '1', then increment ones_left by 1 else, decrement zeros_right by 1
      if (str[i] == '1') {
         ones_left += 1;
      } else {
         zeros_right -= 1;
      }
      // Store the minimum result and zeros_right + ones_left in result
      result = min(result, zeros_right + ones_left);
   }
   // Return the final result
   return result;
}
int main() {
   string str = "001101011";
   int count = minimumZeroRemoval(str);
   cout << "The minimum number of zeros required to remove from the given string is - " << count;
   return 0;
}
Copier après la connexion

Sortie

The minimum number of zeros required to remove from the given string is - 2
Copier après la connexion
  • Time Complexity - O(N), lorsque nous parcourons la chaîne.

  • Complexité spatiale - O(1) puisque nous n'utilisons que l'espace constant.

Conclusion

L'utilisateur a appris deux façons de supprimer le nombre minimum de caractères d'une chaîne binaire donnée. Le code de la deuxième approche est plus lisible car nous utilisons des variables pour stocker le nombre de zéros et de uns au lieu d'utiliser une liste.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sous-séquence non croissante la plus longue dans une chaîne binaire Sous-séquence non croissante la plus longue dans une chaîne binaire Sep 07, 2023 pm 11:13 PM

Dans ce problème, nous devons trouver la sous-séquence non croissante la plus longue d’une chaîne donnée. Non croissant signifie que les caractères sont identiques ou classés par ordre décroissant. Étant donné que les chaînes binaires ne contiennent que « 0 » et « 1 », la chaîne résultante doit soit commencer par « 1 » et se terminer par « 0 », soit commencer et se terminer par « 0 » ou « 1 ». Pour résoudre ce problème, nous allons compter le préfixe « 1 » et le suffixe « 0 » à chaque position de la chaîne et trouver la somme maximale du préfixe « 1 » et du suffixe « 0 ». Énoncé du problème - On nous donne une chaîne binaire str. Nous devons trouver la sous-séquence non croissante la plus longue de la chaîne donnée. Exemple Input–str="010100"Output–4 illustre le plus long fichier non récursif

En PHP, la fonction pack() a pour fonction de convertir les données en chaîne binaire En PHP, la fonction pack() a pour fonction de convertir les données en chaîne binaire Aug 31, 2023 pm 02:05 PM

La fonction pack() regroupe les données dans une chaîne binaire. Syntaxe pack(format,args) Format des paramètres - le format à utiliser. Voici les valeurs possibles - a - chaîne remplie NUL A - chaîne remplie d'espaces h - chaîne hexadécimale, petit quartet en premier H - chaîne hexadécimale, haut quartet en premier c - caractère signé C - caractère non signé s - court signé (toujours 16 bits , ordre des octets machine) S - court non signé (toujours 16 bits, ordre des octets machine) n - court non signé (toujours 16 bits, ordre des octets big endian) v - court non signé (toujours 16 bits, ordre des octets small endian) i - entier signé (dépend de la taille de la machine et de l'ordre des octets) I - Aucun entier signé (en fonction de

Écrit en C++, trouvez le nombre de permutations uniques d'une chaîne binaire commençant par 1 Écrit en C++, trouvez le nombre de permutations uniques d'une chaîne binaire commençant par 1 Sep 05, 2023 am 09:01 AM

Dans le problème donné, on nous donne une chaîne composée de 0 et 1 ; nous devons trouver le nombre total de toutes les permutations commençant par 1. Puisque la réponse peut être un nombre énorme, nous la prenons modulo 1000000007 et la produisons. Input:str="10101001001"Output:210Input:str="101110011"Output:56 Nous allons résoudre ce problème en appliquant des mathématiques combinatoires et en mettant en place des formules. Méthode de solution Dans cette méthode, nous compterons le nombre de 0 et de 1. Supposons maintenant que n soit le nombre de 1 qui apparaissent dans notre chaîne et que m soit le nombre de 0 qui apparaissent dans notre chaîne.

Vérifie si une chaîne peut former une chaîne palindrome en échangeant des paires de caractères au niveau des indices avec des caractères inégaux dans une chaîne binaire Vérifie si une chaîne peut former une chaîne palindrome en échangeant des paires de caractères au niveau des indices avec des caractères inégaux dans une chaîne binaire Sep 02, 2023 pm 08:09 PM

Énoncé du problème Nous avons une chaîne str et une chaîne binaire B. La longueur des deux chaînes est égale à N. Nous devons vérifier si nous pouvons faire de la chaîne str une chaîne palindrome en échangeant ses caractères plusieurs fois sur n'importe quelle paire d'index contenant des caractères inégaux dans la chaîne B. Exemple Exemple Entrée str='AAS' B='101' Sortie 'YES' La traduction chinoise de Explication est : Explication Nous pouvons échanger str[1] et str[2] car B[1] et B[2] ne sont pas égaux . La chaîne finale peut être « ASA ». Entrée str='AASS' B='1111' et sortie 'No'. La traduction chinoise de l'explication est : Explication que nous ne pouvons pas créer le palindrome de chaîne,

Trouver le joueur avec le moins de zéros après avoir vidé une chaîne binaire (en supprimant les sous-chaînes non vides) Trouver le joueur avec le moins de zéros après avoir vidé une chaîne binaire (en supprimant les sous-chaînes non vides) Sep 16, 2023 am 10:21 AM

Dans cet article, nous aborderons un problème intéressant lié au domaine de la manipulation de chaînes et de la théorie des jeux : "Vider une chaîne binaire en supprimant les sous-chaînes non vides et trouver le joueur avec le moins de zéros restants". Cette question explore le concept d'utilisation de chaînes binaires pour les jeux compétitifs. Notre objectif est de trouver le joueur avec le moins de 0 restant à la fin de la partie. Nous discuterons de ce problème, fournirons une implémentation de code C++ et expliquerons le concept à travers un exemple. Comprendre l'énoncé du problème Deux joueurs reçoivent une chaîne binaire et jouent à tour de rôle. A chaque tour, le joueur supprime les sous-chaînes non vides contenant au moins un "1". Le jeu se termine lorsque la chaîne devient vide ou qu'il n'y a pas de "1" dans la chaîne. Les joueurs incapables d’agir perdent la partie. La tâche est de trouver le 0 final

Calculer des chaînes binaires de longueur N qui sont des concaténations répétées de sous-chaînes Calculer des chaînes binaires de longueur N qui sont des concaténations répétées de sous-chaînes Sep 07, 2023 am 10:13 AM

Le but de cet article est d'implémenter un programme permettant de compter le nombre de chaînes binaires de longueur N formées par concaténation répétée d'une sous-chaîne. L'objectif est de déterminer combien de chaînes binaires de longueur N peuvent être créées en concaténant de manière répétée des sous-chaînes individuelles du texte donné, où N est un entier positif. Énoncé du problème Implémentez un programme qui compte le nombre de chaînes binaires de longueur N qui concatènent à plusieurs reprises des sous-chaînes. Exemple Exemple 1 Prenons l'entrée, N = 3 Sortie : 2 La traduction chinoise de l'explication est : Explication La liste suivante répertorie les chaînes binaires réalisables de longueur N = 3, dans lesquelles une sous-chaîne est concaténée de manière répétée. "000":Lasubstr

Maximisez la fonction donnée en sélectionnant des sous-chaînes de longueur égale à partir de la chaîne binaire donnée Maximisez la fonction donnée en sélectionnant des sous-chaînes de longueur égale à partir de la chaîne binaire donnée Aug 28, 2023 am 09:49 AM

Étant donné deux chaînes binaires str1 et str2 de même longueur, nous devons maximiser la valeur de fonction donnée en sélectionnant des sous-chaînes parmi les chaînes données de même longueur. La fonction donnée est comme ceci - fun(str1,str2)=(len(substring))/(2^xor(sub1,sub2)). Ici, len(substring) est la longueur de la première sous-chaîne et xor(sub1,sub2) est le XOR de la sous-chaîne donnée, cela est possible puisqu'il s'agit de chaînes binaires. L'exemple Input1:stringstr1=10110&stringstr2=11101Output:3 illustre notre

Nombre minimum de mouvements requis pour placer tous les 0 avant les 1 dans une chaîne binaire Nombre minimum de mouvements requis pour placer tous les 0 avant les 1 dans une chaîne binaire Sep 23, 2023 pm 01:29 PM

Énoncé du problème Nous recevons une chaîne binaire str et nous devons supprimer le minimum de caractères de la chaîne afin de pouvoir placer tous les zéros avant les uns. Exemple d'entrée str='00110100111' Sortie 3 Description Ici, nous pouvons obtenir la sortie 3 de deux manières. Nous pouvons supprimer arr[2], arr[3] et arr[5] ou arr[4], arr[6] et arr[7] de la chaîne. L'entrée str='001101011' et la sortie 2 montrent que nous pouvons supprimer arr[4] et arr[6] et mettre tous les zéros avant 1. Entrée str='000111' La sortie 0 signifie que dans la chaîne donnée, tous les zéros ont été placés avant 1, nous n'avons donc pas besoin de commencer par

See all articles