Table des matières
Exemple
Instructions
Méthode 2
Algorithme
Sortie
Conclusion
Maison développement back-end C++ 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
chaîne binaire le plus long sous-séquence non croissante

Sous-séquence non croissante la plus longue dans une chaîne binaire

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 soit les mêmes, soit 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"
Copier après la connexion
Output – 4
Copier après la connexion

Instructions

La sous-séquence non croissante la plus longue est "1100".

Input –  str = "010110010"
Copier après la connexion
Output – 6
Copier après la connexion

Instructions

La sous-séquence non croissante la plus longue est "111000".

Input –  str = ‘00000000’
Copier après la connexion
Output – 8
Copier après la connexion

Instructions

La sous-séquence non croissante la plus longue est « 00000000 », qui est égale à la chaîne donnée.

Méthode 1

Dans cette méthode, nous stockerons le nombre de préfixes « 1 » et de suffixes « 0 » pour chaque index du tableau. Après cela, nous obtenons les valeurs du même index dans les deux tableaux, les ajoutons et trouvons la somme maximale.

Algorithme

  • Étape 1 - Définissez les tableaux pre1s et suffix0s pour stocker le préfixe 1 et le suffixe 0. De plus, initialisez tous les éléments du tableau à 0.

  • Étape 2 - Utilisez une boucle for pour parcourir la chaîne et calculer le préfixe 1 pour chaque index. Si i > 0, alors la valeur de l'élément précédent est ajoutée à l'élément actuel.

  • Étape 3 - Si le caractère actuel est "1", ajoutez 1 à la valeur actuelle de pre1s[i].

  • Étape 4 - Maintenant, comptez le suffixe 0 dans la chaîne donnée. Parcourez la chaîne en commençant par la fin.

  • Étape 5 - Si la valeur de "I" n'est pas égale à "n – 1", alors récupérez la valeur de l'élément "I + 1" et ajoutez-la à l'élément actuel.

  • Étape 6 - Si l'élément actuel est "0", ajoutez 1 à l'élément actuel.

  • Étape 7 - Maintenant, initialisez la variable « res » avec 0.

  • Étape 8 - Parcourez les "pre1s" et les "suffix0s" à l'aide d'une boucle.

  • Étape 9 - Obtenez la valeur du i-ème index dans les tableaux "pre1s" et "suffix0s" et additionnez-les ensemble. De plus, si « sum » est supérieur à la valeur actuelle de la variable « res », la valeur de la variable « res » est modifiée avec la valeur « sum ».

  • Étape 10 - Renvoyez la valeur de la variable "res".

Exemple

Pour l'entrée « 010100 », le tableau de préfixes est [0, 1, 1, 2, 2, 2] et le tableau de suffixes 0 est [4, 3, 3, 2, 2, 1]. Le tableau de somme sera [4, 4, 4, 4, 4, 1] et la valeur maximale dans le tableau de somme est 4. La réponse sera donc 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;
}
Copier après la connexion

Sortie

The length of the longest non-increasing subsequence in the given binary string is - 4
Copier après la connexion

Complexité temporelle - O(N) car nous devons initialiser le tableau avec le préfixe 1 et le suffixe 0.

Complexité spatiale - O(N) puisque nous stockons le préfixe 1 et le suffixe 0 dans un tableau

Méthode 2

Dans cette méthode, nous compterons d’abord le nombre total de zéros. Après cela, nous commençons à parcourir la chaîne, en continuant à compter les "1", et si un 0 est trouvé, en le décrémentant de "0". De plus, nous additionnons les comptes de 0 et 1 à chaque itération et trouvons la valeur maximale résultante.

Algorithme

  • Étape 1 - Définissez les variables 'count1', 'count0' et 'res' et initialisez-les avec 0 pour stocker le décompte et le résultat final de 1, 0 respectivement.

  • Étape 2 - Comptez le nombre total de zéros en parcourant la chaîne et en la stockant dans la variable "count0".

  • Étape 3 - Maintenant, parcourez la chaîne à l'aide d'une boucle.

  • Étape 4 - Dans la boucle, si le caractère courant est "1", augmentez la valeur de "count1" de 1, sinon diminuez la valeur de "count0" de 1.

  • Étape 5 - Stockez également la valeur maximale de "res" et "count0 + count1" dans la variable "res".

  • Étape 6 - Lorsque la boucle se termine, renvoyez la valeur de la variable "res".

Exemple

#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;
}
Copier après la connexion

Sortie

The length of the longest non-increasing subsequence in the given binary string is - 6
Copier après la connexion

Complexité temporelle - O(N) lorsque nous comptons le nombre total de zéros dans la chaîne et parcourons la chaîne pour trouver la sous-séquence la plus longue.

Complexité spatiale - O(1)

Conclusion

Ici, les deux méthodes ont la même complexité temporelle mais une complexité spatiale différente. La deuxième méthode utilise un espace constant lorsque nous optimisons le code, mais la première méthode utilise un espace dynamique pour stocker le nombre total de préfixe 1 et de suffixe 0.

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

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

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)

Comment vérifier l'heure à laquelle Xiaohongshu a publié une vidéo ? Quel est le temps nécessaire pour publier une vidéo ? Comment vérifier l'heure à laquelle Xiaohongshu a publié une vidéo ? Quel est le temps nécessaire pour publier une vidéo ? Mar 21, 2024 pm 04:26 PM

En tant que plateforme de partage de style de vie, Xiaohongshu est l'endroit où de plus en plus d'utilisateurs choisissent de publier leur propre contenu vidéo et de partager leur vie quotidienne avec d'autres utilisateurs. De nombreux utilisateurs peuvent rencontrer un problème lors de la publication de vidéos : comment vérifier l'heure à laquelle eux ou d'autres ont publié des vidéos ? 1. Comment vérifier l'heure à laquelle Xiaohongshu a publié une vidéo ? 1. Vérifiez l'heure à laquelle vous avez publié la vidéo. Pour vérifier l'heure à laquelle vous avez publié la vidéo, vous devez d'abord ouvrir l'application Xiaohongshu et vous connecter à votre compte personnel. Au bas de l'interface de la page d'accueil personnelle, il y aura une option marquée "Création". Après avoir cliqué pour entrer, vous verrez une colonne intitulée "Vidéo". Ici, vous pouvez parcourir une liste de toutes les vidéos publiées et vérifier facilement quand elles ont été publiées. Il y a un bouton « Afficher les détails » dans le coin supérieur droit de chaque vidéo.

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

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

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

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,

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

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

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

See all articles