Clasificación de array con reversa alrededor del medio

Considere la array dada arr[], necesitamos encontrar si podemos ordenar la array con la operación dada. La operación es 
1. Tenemos que seleccionar un subarreglo del arreglo dado tal que el elemento medio (o elementos (en el caso de un 
número par de elementos)) del subarreglo sea también el elemento medio (o elementos (en el caso de un número par de elementos) elementos)) de 
la array dada. 
2. Luego tenemos que invertir el subarreglo seleccionado y colocar este subarreglo invertido en el arreglo. 
Podemos hacer la operación anterior tantas veces como queramos. La tarea es encontrar si podemos ordenar la array con la operación dada. 
Ejemplos: 
 

Input : arr[] = {1, 6, 3, 4, 5, 2, 7}
Output : Yes
We can choose sub-array[3, 4, 5] on 
reversing this we get [1, 6, 5, 4, 3, 2, 7]
again on selecting [6, 5, 4, 3, 2] and 
reversing this one we get [1, 2, 3, 4, 5, 6, 7] 
which is sorted at last thus it is possible
to sort on multiple reverse operation.

Input : arr[] = {1, 6, 3, 4, 5, 7, 2}
Output : No

Una solución es que podemos rotar cada elemento alrededor del centro, lo que da dos posibilidades en la array, es decir, el valor en el índice ‘i’ o el valor en el índice «longitud – 1 – i». 
Si la array tiene n elementos, entonces 2 ^ n combinaciones posibles, por lo que el tiempo de ejecución sería O (2 ^ n).
Otra solución puede ser hacer una copia de la array y ordenar la array copiada. Luego compare cada elemento de la array ordenada con el elemento equivalente de la array original y su imagen especular cuando gire alrededor del centro. Ordenar la array requiere O (n * logn) y se requieren 2n comparaciones, por lo que el tiempo de ejecución sería O (n * logn).
 

C++

// CPP program to find possibility to sort
// by multiple subarray reverse operation
#include <bits/stdc++.h>
using namespace std;
 
bool ifPossible(int arr[], int n)
{
    int cp[n];
 
    // making the copy of the original array
    copy(arr, arr + n, cp);
 
    // sorting the copied array
    sort(cp, cp + n);
 
    for (int i = 0; i < n; i++) {
 
        // checking mirror image of elements of sorted
        // copy array and equivalent element of original
        // array
        if (!(arr[i] == cp[i]) && !(arr[n - 1 - i] == cp[i]))
            return false;
    }
 
    return true;
}
 
// driver code
int main()
{
    int arr[] = { 1, 7, 6, 4, 5, 3, 2, 8 };
    int n = sizeof(arr) / sizeof(arr[0]);
    if (ifPossible(arr, n))
       cout << "Yes";
    else
       cout << "No";
 
    return 0;
}

Java

// Java program to find possibility to sort
// by multiple subarray reverse operation
import java.util.*;
class GFG {
 
    static boolean ifPossible(int arr[], int n)
    {
 
        // making the copy of the original array
        int copy[] = Arrays.copyOf(arr, arr.length);
 
        // sorting the copied array
        Arrays.sort(copy);
 
        for (int i = 0; i < n; i++) {
 
            // checking mirror image of elements of
            // sorted copy array and equivalent element
            // of original array
            if (!(arr[i] == copy[i]) && !(arr[n - 1 - i] == copy[i]))
                return false;
        }
 
        return true;
    }
 
    // driver code
    public static void main(String[] args)
    {
        int arr[] = { 1, 7, 6, 4, 5, 3, 2, 8 };
        int n = arr.length;
        if (ifPossible(arr, n))
           System.out.println("Yes");
        else
           System.out.println("No");
    }
}

Python 3

# Python 3 program to find
# possibility to sort by
# multiple subarray reverse
# operation
 
def ifPossible(arr, n):
 
    cp = [0] * n
 
    # making the copy of
    # the original array
    cp = arr
 
    # sorting the copied array
    cp.sort()
 
    for i in range(0 , n) :
  
        # checking mirror image of
        # elements of sorted copy
        # array and equivalent element
        # of original array
        if (not(arr[i] == cp[i]) and not
               (arr[n - 1 - i] == cp[i])):
            return False
 
    return True
 
# Driver code
arr = [1, 7, 6, 4, 5, 3, 2, 8]
n = len(arr)
if (ifPossible(arr, n)):
    print("Yes")
else:
    print("No")
 
# This code is contributed by Smitha

C#

// C# Program to answer queries on sum
// of sum of odd number digits of all
// the factors of a number
using System;
 
class GFG {
 
    static bool ifPossible(int []arr, int n)
    {
        int []cp = new int[n];
     
        // making the copy of the original
        // array
        Array.Copy(arr, cp, n);
     
        // sorting the copied array
        Array.Sort(cp);
     
        for (int i = 0; i < n; i++) {
     
            // checking mirror image of
            // elements of sorted copy
            // array and equivalent element
            // of original array
            if (!(arr[i] == cp[i]) &&
                 !(arr[n - 1 - i] == cp[i]))
                return false;
        }
     
        return true;
    }
     
    // Driver code
    public static void Main()
    {
        int []arr = new int[]{ 1, 7, 6, 4,
                               5, 3, 2, 8 };
        int n = arr.Length;
         
        if (ifPossible(arr, n))
            Console.WriteLine( "Yes");
        else
            Console.WriteLine( "No");
    }
}
 
// This code is contributed by Sam007

PHP

<?php
// PHP program to find possibility to sort
// by multiple subarray reverse operation
function ifPossible(&$arr, $n)
{
    $cp = array();
     
    // making the copy of the
    // original array
    $cp = $arr;
 
    // sorting the copied array
    sort($cp);
 
    for ($i = 0; $i < $n; $i++)
    {
 
        // checking mirror image of elements
        // of sorted copy array and equivalent
        // element of original array
        if (!($arr[$i] == $cp[$i]) &&
            !($arr[$n - 1 - $i] == $cp[$i]))
            return false;
    }
 
    return true;
}
 
// Driver code
$arr = array(1, 7, 6, 4, 5, 3, 2, 8);
$n = sizeof($arr);
if (ifPossible($arr, $n))
    echo "Yes";
else
    echo "No";
 
// This code is contributed
// by Shivi_Aggarwal
?>

Javascript

<script>
 
// Javascript program to find possibility to sort
// by multiple subarray reverse operation
   
    function ifPossible(arr, n)
    {
   
        // making the copy of the original array
        let copy = arr;
   
        // sorting the copied array
        copy.sort();
   
        for (let i = 0; i < n; i++) {
   
            // checking mirror image of elements of
            // sorted copy array and equivalent element
            // of original array
            if (!(arr[i] == copy[i]) && !(arr[n - 1 - i] == copy[i]))
                return false;
        }
   
        return true;
    }
 
// driver code
 
     let arr = [ 1, 7, 6, 4, 5, 3, 2, 8 ];
        let n = arr.length;
        if (ifPossible(arr, n))
           document.write("Yes");
        else
           document.write("No");;
     
</script>
Producción: 

Yes

 

Publicación traducida automáticamente

Artículo escrito por akash1295 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 *