Maison >développement back-end >C++ >Maximiser le nombre de 0 à retourner dans un tableau binaire donné de telle sorte qu'il y ait au moins K 0 entre deux 1
Un tableau binaire est un type spécial de tableau qui contient uniquement les nombres 0 et 1. Dans ce problème, on nous donne un tableau binaire et un entier K. Notre tâche est de calculer le nombre maximum de 0 pouvant être transformés en 1 dans un tableau binaire donné de telle sorte qu'il y ait au moins K 0 entre deux 1.
Input 1: arr[] = { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 }, K = 2
Output 1: yesLa traduction chinoise de
Les 3ème et 6ème indices du tableau ci-dessus sont les seuls indices valides et peuvent être inversés pour garantir qu'il y a au moins 2 0 entre les deux 1. Le tableau résultant est donc {1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0}
Input 2: arr[] = {0, 1, 0, 0, 0, 1}, k = 1
Output 2: 1La traduction chinoise de
Le 3ème index du tableau ci-dessus est le seul index inversé valide.
Nous avons vu l’exemple donné ci-dessus avec tableau et entier k, passons à la méthode −
L'idée de cette méthode est de compter le nombre de 0 consécutifs entre deux 1 et de vérifier s'il convient de retourner des 0 en 1 entre eux. Supposons qu’il y ait X zéros entre deux uns. Selon l'observation, le nombre de 0 pouvant être inversés est (X-K) / (K+1). Alors, parcourez le tableau et enregistrez combien de 0 consécutifs il y a entre chaque paire de 1. Ensuite, ajoutez le nombre de 0 pouvant être inversés au nombre de variables, qui correspond à la réponse souhaitée.
Discutons de la méthode ci-dessous étape par étape-
Tout d'abord, nous allons créer une fonction appelée « onesCount » qui prendra le tableau donné « arr » et l'entier « K » comme paramètres et renverra l'entier requis « count » comme valeur de retour.
Créez le nombre de variables et lastIdx.
Initialisez la variable count avec 0 pour stocker le nombre de fillip 0.
Initialisez la variable lastIdx en utilisant (-(K+1)) pour stocker le dernier index du tableau avec une valeur de 1.
Utilisez une boucle for pour parcourir le tableau, vérifiez si l'élément actuel est 1, puis vérifiez s'il y a suffisamment de 0 entre deux 1 consécutifs pour ajouter un autre 1. Enfin, mettez à jour la valeur d'index du dernier 1.
Écrivez une condition qui compte le dernier segment de 0 dans le tableau et ajoutez-le au nombre de variables.
Enfin, notre décompte final de réponses est renvoyé.
Vous trouverez ci-dessous un programme C++ permettant de calculer la conversion maximale de 0 en 1 pour garantir qu'il y a au moins k 0 entre deux 1.
#include <bits/stdc++.h> using namespace std; // Function to find the count of the maximum number of 0s to be filliped int onesCount(int arr[], int n, int k){ int count = 0; // Stores the count of 1's int lastIdx = -(k + 1); // Stores the last index of value 1 // Traverse the array using for loop for (int i = 0; i < n; i++) { // If the current element is 1 if (arr[i] == 1) { // Verify whether there are enough 0s between two consecutive 1s to add another 1 in between them. if (i - lastIdx - 1 >= 2 * (k - 1)) { count += (i - lastIdx - 1 - k) / (k + 1); } lastIdx = i; // Update the last index of the value 1 of the array } } // condition to include the last section of 0s in the array count += (n - lastIdx - 1) / (k + 1); // Return the answer return count; } int main(){ int arr[] = { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 }; // given array int N = sizeof(arr) / sizeof(arr[0]); //getting size of an array int K = 2; //given integer // Call the function int result = onesCount(arr, N, K); cout<< "The count of Maximum filliped of 0's is "<< result ; return 0; }
The Count of Maximum filliped of 0's is 2
Complexité temporelle et spatiale
La complexité temporelle du code ci-dessus est O(N) car nous parcourons uniquement le tableau. où N est la taille du tableau donné.
La complexité spatiale du code ci-dessus est O(1) car nous n'utilisons aucun espace supplémentaire.
Dans ce tutoriel, nous avons implémenté un programme pour trouver le nombre maximum de 0 à retourner dans un tableau binaire donné afin qu'il y ait au moins K 0 entre deux 1. Ce problème est résolu en comptant le nombre de zéros consécutifs entre deux 1 et en vérifiant s'il est approprié d'inverser quelques zéros entre eux. La complexité temporelle est O(N) et la complexité spatiale est O(1). où N est la taille de la chaîne.
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!