Dadas dos arrays binarias , A[] y B[] de tamaño N respectivamente, la tarea es encontrar la cantidad de elementos en la array A[] que quedarán después de realizar la siguiente operación hasta que no se puedan eliminar elementos:
- Si los elementos iniciales de la array A[] y B[] son iguales, elimine ambos elementos.
- De lo contrario, agregue el carácter inicial de la array A[] al final de la array, A[] , después de eliminarlo.
Ejemplos:
Entrada: A[] = {1, 1, 0, 1}, B[] = {1, 0, 1, 1}, N = 4
Salida: 0
Explicación:
Las operaciones se realizan de la siguiente manera:
- A[0]( =1) = B[0]( =1): Eliminar los elementos. Posteriormente, las arrays se modifican a {1, 0, 1} y {0, 1, 1} respectivamente.
- A[0](=1) != B[0](= 0): desplaza A[0] al final de la array A[]. Posteriormente, las arrays se modifican a { 0, 1, 1} y {0, 1, 1} respectivamente.
- A[0]( =0) = B[0]( =0): Eliminar los elementos. Posteriormente, las arrays se modifican a {1, 1} y {1, 1} respectivamente.
- A[0]( =1) = B[0]( =1): Eliminar los elementos. Posteriormente, las arrays se modifican a {1} y {1} respectivamente.
- A[0]( =1) = B[0]( =1): Eliminar los elementos. A partir de entonces, ambas arrays quedaron vacías.
Por lo tanto, no quedan elementos en la array A[].
Entrada: A[] = {1, 0, 1, 1, 1, 1}, B[] = {1, 1, 0, 1, 0, 1}, N = 6
Salida: 2
Enfoque: el problema dado se puede resolver eliminando los 0 y 1 comunes y luego contando el número único de 0 y 1 en ambas arrays. Considere las siguientes observaciones:
- Los elementos se pueden eliminar siempre que quede un elemento igual al primer elemento de B[] en la array A[] .
- También se puede observar que el orden de los elementos de A[] se puede cambiar fácilmente.
- Por lo tanto, la idea es mantener la cuenta del número de 0 s y 1 s que quedan en A[] y si se encuentra un elemento en B[] tal que el mismo elemento ya no está presente en A[] , entonces no más se pueden realizar operaciones.
Siga los pasos a continuación para resolver el problema:
- Recorra la array , A[] y cuente el número total de 0 s y 1 s en variables y almacénelos en variables, digamos cero y uno respectivamente.
- Inicialice una variable, digamos count as0, para almacenar el número total de eliminaciones realizadas.
- Recorra la array , B[] usando la variable i y haga lo siguiente:
- Si B[i] es igual a 0 y zero>0 , entonces incremente el valor de count en 1 y disminuya cero en 1 .
- De lo contrario, si B[i] es igual a 1 y one>0 , entonces incremente el valor de count en 1 y disminuya uno en 1 .
- De lo contrario, salga del bucle ya que no se pueden realizar más operaciones.
- Finalmente, después de completar los pasos anteriores, imprima la diferencia entre N y cuente como resultado.
A continuación se muestra la implementación del enfoque anterior:
C++
// C++ program for the above approach #include <bits/stdc++.h> using namespace std; // Function to calculate minimum size // of the array A[] after performing // the given operations int minimumSizeAfterDeletion(int A[], int B[], int N) { // Stores the count of 0s and 1s int zero = 0, one = 0; // Stores the total deletions performed int count = 0; // Traverse the array A[] for (int i = 0; i < N; i++) { if (A[i] == 0) { zero++; } else { one++; } } // Traverse array B[] for (int i = 0; i < N; i++) { // If the B[i] is 0 and zero is // greater than 0 if (B[i] == 0 && zero > 0) { // Increment count by 1 count++; // Decrement zero by 1 zero--; } // Else if the B[i] is 1 and one is // greater than 0 else if (B[i] == 1 && one > 0) { // Increment count by 1 count++; // Decrement one by 1 one--; } // Otherwise else { break; } } // Return the answer return N - count; } // Driver Code int main() { // Given Input int A[] = { 1, 0, 1, 1, 1, 1 }; int B[] = { 1, 1, 0, 1, 0, 1 }; int N = 6; // Function Call cout << minimumSizeAfterDeletion(A, B, N); return 0; }
Java
// Java program for the above approach import java.io.*; class GFG{ // Function to calculate minimum size // of the array A[] after performing // the given operations static int minimumSizeAfterDeletion(int A[], int B[], int N) { // Stores the count of 0s and 1s int zero = 0, one = 0; // Stores the total deletions performed int count = 0; // Traverse the array A[] for(int i = 0; i < N; i++) { if (A[i] == 0) { zero++; } else { one++; } } // Traverse array B[] for(int i = 0; i < N; i++) { // If the B[i] is 0 and zero is // greater than 0 if (B[i] == 0 && zero > 0) { // Increment count by 1 count++; // Decrement zero by 1 zero--; } // Else if the B[i] is 1 and one is // greater than 0 else if (B[i] == 1 && one > 0) { // Increment count by 1 count++; // Decrement one by 1 one--; } // Otherwise else { break; } } // Return the answer return N - count; } // Driver Code public static void main(String[] args) { // Given Input int A[] = { 1, 0, 1, 1, 1, 1 }; int B[] = { 1, 1, 0, 1, 0, 1 }; int N = 6; // Function Call minimumSizeAfterDeletion(A, B, N); System.out.println(minimumSizeAfterDeletion(A, B, N)); } } // This code is contributed by Potta Lokesh
Python3
# Python3 program for the above approach # Function to calculate minimum size # of the array A[] after performing # the given operations def minimumSizeAfterDeletion(A, B, N): # Stores the count of 0s and 1s zero = 0 one = 0 # Stores the total deletions performed count = 0 # Traverse the array A[] for i in range(N): if A[i] == 0: zero += 1 else: one += 1 # Traverse array B[] for i in range(N): # If the B[i] is 0 and zero is # greater than 0 if B[i] == 0 and zero > 0: # Increment count by 1 count += 1 # Decrement zero by 1 zero -= 1 # Else if the B[i] is 1 and one is # greater than 0 elif B[i] == 1 and one > 0: # Increment count by 1 count += 1 # Decrement one by 1 one -= 1 # Otherwise else: break # Return the answer return N - count # Driver code # Given input A = [ 1, 0, 1, 1, 1, 1 ] B = [ 1, 1, 0, 1, 0, 1 ] N = 6 # Function call print(minimumSizeAfterDeletion(A, B, N)) # This code is contributed by Parth Manchanda
C#
// C# program for the above approach using System; using System.Collections.Generic; class GFG{ // Function to calculate minimum size // of the array A[] after performing // the given operations static int minimumSizeAfterDeletion(int []A, int []B, int N) { // Stores the count of 0s and 1s int zero = 0, one = 0; // Stores the total deletions performed int count = 0; // Traverse the array A[] for (int i = 0; i < N; i++) { if (A[i] == 0) { zero++; } else { one++; } } // Traverse array B[] for (int i = 0; i < N; i++) { // If the B[i] is 0 and zero is // greater than 0 if (B[i] == 0 && zero > 0) { // Increment count by 1 count++; // Decrement zero by 1 zero--; } // Else if the B[i] is 1 and one is // greater than 0 else if (B[i] == 1 && one > 0) { // Increment count by 1 count++; // Decrement one by 1 one--; } // Otherwise else { break; } } // Return the answer return N - count; } // Driver Code public static void Main() { // Given Input int []A = { 1, 0, 1, 1, 1, 1 }; int []B = { 1, 1, 0, 1, 0, 1 }; int N = 6; // Function Call Console.Write(minimumSizeAfterDeletion(A, B, N)); } } // This code is contributed by ipg2016107.
Javascript
<script> // Javascript program for the above approach // Function to calculate minimum size // of the array A[] after performing // the given operations function minimumSizeAfterDeletion(A, B, N) { // Stores the count of 0s and 1s var zero = 0, one = 0; // Stores the total deletions performed var count = 0; // Traverse the array A[] for(var i = 0; i < N; i++) { if (A[i] == 0) { zero++; } else { one++; } } // Traverse array B[] for(var i = 0; i < N; i++) { // If the B[i] is 0 and zero is // greater than 0 if (B[i] == 0 && zero > 0) { // Increment count by 1 count++; // Decrement zero by 1 zero--; } // Else if the B[i] is 1 and one is // greater than 0 else if (B[i] == 1 && one > 0) { // Increment count by 1 count++; // Decrement one by 1 one--; } // Otherwise else { break; } } // Return the answer return N - count; } // Driver Code // Given Input var A = [ 1, 0, 1, 1, 1, 1 ]; var B = [ 1, 1, 0, 1, 0, 1 ]; var N = 6; // Function Call minimumSizeAfterDeletion(A, B, N); document.write(minimumSizeAfterDeletion(A, B, N)); // This code is contributed by shivanisinghss2110 </script>
2
Complejidad de tiempo: O (N), ya que estamos usando un bucle para atravesar N veces, por lo que nos costará O (N) tiempo.
Espacio auxiliar: O(1), ya que no estamos utilizando ningún espacio adicional.
Publicación traducida automáticamente
Artículo escrito por ananyadixit8 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA