Compruebe si dos arrays se pueden igualar invirtiendo las subarreglas varias veces

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:
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>
Producción

Yes

Complejidad temporal: O(N*Log N)  
Espacio auxiliar: O(1)

Publicación traducida automáticamente

Artículo escrito por spp____ y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *