Dados dos arreglos A[] y B[], la tarea es verificar si el arreglo B puede hacerse igual a A invirtiendo los subarreglos de B cualquier número de veces.
Ejemplos:
Entrada: A[] = {1 2 3}, B[] = {3 1 2}
Salida: Sí
Explicación:
Invierta los subarreglos en el arreglo B como se muestra a continuación:
Invierta el subarreglo [3, 1], B se convierte en [1, 3, 2]
Subarreglo inverso [3, 2], B se convierte en [1, 2, 3] = A
Hay varias formas de convertir B en A.
Entrada: A[] = {1 2 3}, B[] = {3 4 1 }
Salida: No
Enfoque : dado que tenemos que hacer que la array B sea igual a la array A solo invirtiendo cualquier subarray cualquier cantidad de veces, por lo tanto, solo es posible cuando ambas arrays son anagramas. Para verificar si ambas arrays son anagramas, ordenaremos ambas arrays y verificaremos si en algún elemento del índice no son iguales, devolveremos falso, de lo contrario devolveremos verdadero al final.
A continuación la implementación del enfoque anterior:
C++
// C++ implementation to check if // two arrays can be made equal #include <bits/stdc++.h> using namespace std; // Function to check if array B // can be made equal to array A bool canMadeEqual(int A[], int B[], int n) { // sort both the arrays sort(A, A + n); sort(B, B + n); // Check if both the arrays // are equal or not for (int i = 0; i < n; i++) if (A[i] != B[i]) return false; return true; } // Driver Code int main() { int A[] = { 1, 2, 3 }; int B[] = { 1, 3, 2 }; int n = sizeof(A) / sizeof(A[0]); if (canMadeEqual(A, B, n)) cout << "Yes"; else cout << "No"; return 0; }
C
// C implementation to check if // two arrays can be made equal #include<stdio.h> #include<math.h> int sort(int a[],int n) { int i, j, tmp; for(i = 0; i < n; i++) { for(j = i + 1; j < n; j++) { if(a[j] <a[i]) { tmp = a[i]; a[i] = a[j]; a[j] = tmp; } } } return 0; } // Function to check if array B // can be made equal to array A int canMadeEqual(int A[], int B[], int n) { int i; // Sort both arrays sort(A, n); sort(B, n); // Check both arrays equal or not for(i = 0; i < n; i++) { if (A[i] != B[i]) { return(0); } } return (1); } // Driver Code int main() { int A[] = { 1, 2, 3 }; int n; int B[] = { 1, 3, 2 }; n = sizeof(A) / sizeof(A[0]); if(canMadeEqual(A, B, n)) { printf("Yes"); } else { printf("No"); } return 0; } // This code is contributed by adityakumar27200
Java
// Java implementation to check if // two arrays can be made equal import java.util.*; class GFG{ // Function to check if array B // can be made equal to array A public static boolean canMadeEqual(int[] A, int[] B, int n) { // Sort both the arrays Arrays.sort(A); Arrays.sort(B); // Check if both the arrays // are equal or not for(int i = 0; i < n; i++) { if (A[i] != B[i]) { return false; } } return true; } // Driver code public static void main(String[] args) { int A[] = { 1, 2, 3 }; int B[] = { 1, 3, 2 }; int n = A.length; if (canMadeEqual(A, B, n)) System.out.print("Yes"); else System.out.print("No"); } } // This code is contributed by divyeshrabadiya07
Python3
# Python3 implementation to check if # two arrays can be made equal # Function to check if array B # can be made equal to array A def canMadeEqual(A, B, n): # Sort both the arrays A.sort() B.sort() # Check if both the arrays # are equal or not for i in range(n): if (A[i] != B[i]): return False return True # Driver Code if __name__ == "__main__": A = [ 1, 2, 3 ] B = [ 1, 3, 2 ] n = len(A) if (canMadeEqual(A, B, n)): print( "Yes") else: print("No") # This code is contributed by chitranayal
C#
// C# implementation to check if // two arrays can be made equal using System; class GFG{ // Function to check if array B // can be made equal to array A static bool canMadeEqual(int[] A, int[] B, int n) { // Sort both the arrays Array.Sort(A); Array.Sort(B); // Check if both the arrays // are equal or not for(int i = 0; i < n; i++) { if (A[i] != B[i]) { return false; } } return true; } // Driver code public static void Main() { int[] A = { 1, 2, 3 }; int[] B = { 1, 3, 2 }; int n = A.Length; if (canMadeEqual(A, B, n)) Console.Write("Yes"); else Console.Write("No"); } } // This code is contributed by adityakumar27200
Javascript
<script> // Javascript implementation to check if // two arrays can be made equal // Function to check if array B // can be made equal to array A function canMadeEqual(A, B, n) { // sort both the arrays A.sort(); B.sort(); // Check if both the arrays // are equal or not for (var i = 0; i < n; i++) if (A[i] != B[i]) return false; return true; } // Driver Code var A = [ 1, 2, 3 ]; var B = [ 1, 3, 2 ]; var n = A.length; if (canMadeEqual(A, B, n)) document.write( "Yes"); else document.write("No"); // This code is contributed by rutvik_56. </script>
Yes
Complejidad temporal: O(N*Log N)
Espacio auxiliar: O(1)