Saltar al contenido

Reorganice la matriz moviendo los elementos del medio alternativamente hacia el principio y hacia el final

Reorganice la matriz moviendo los elementos del medio alternativamente hacia el principio y hacia el final

La tarea de una matriz es mover el elemento del medio alternativamente al principio y al final de la matriz hasta que el elemento del medio se vuelva igual al primer elemento de la matriz original.

Entrada: arr[]=[2, 8, 5, 9, 10]
Producción: [9, 5, 2, 10, 8]
Explicación: Podemos obtener esta salida moviendo el elemento del medio
paso 1: el elemento medio 5 se mueve al frente de la matriz [5, 2, 8, 9, 10]
Paso 2: el elemento intermedio 8 se mueve al final de la matriz [5, 2, 9, 10, 8]
Paso 3: el elemento central 9 se mueve delante de la matriz [9, 5, 2, 10, 8]

Entrada: arr[]=[10, 12, 6, 5, 3, 1]
Producción: [1, 3, 5, 10, 6, 12]

Enfoque ingenuo: Mueva alternativamente el elemento del medio de la matriz al principio y al final de la matriz.
Tome el elemento del medio y muévalo al principio de la matriz si c es par, o muévalo al final de la matriz si c es impar. Salga del bucle cuando el elemento del medio coincida con el primer elemento de la matriz original.

A continuación se muestra la implementación del enfoque anterior:

Python3

def AlternateShift(arr, x):

 

    

    mid = len(arr) // 2

 

    

    c = 0

 

    

    

    while arr[mid] != x:

 

        

        z = arr.pop(mid)

 

        

        

        if c % 2 == 0:

            arr.insert(0, z)

 

        

        

        else:

            arr.append(z)

 

        

        c += 1

 

 

Arr = [2, 8, 5, 9, 10]

 

a = Arr[0]

 

AlternateShift(Arr, a)

 

print(*Arr)

Complejidad del tiempo: en2)
Sala auxiliar: O (1)

Enfoque eficiente: El cambio alternativo también es el caso de invertir la mitad de la matriz. Primero tome un elemento del último al medio si n es par, o tome un elemento del último segundo al medio y agréguelo a la nueva matriz br. en[], luego agregue el primer elemento en br. en[]. Luego inserte el elemento desde el medio-1 al índice 1 y en br. insertar[]. Entonces, la matriz se devuelve en la mitad del orden inverso.

Algoritmo:

Paso 1: Declarar una nueva matriz br e inicializar Artículo que n-1.
Paso 2: Si n es par, atraviesa desde la última posición del índice o si n es impar, luego atraviesa desde el penúltimo índice pos-1.
Paso 3: Almacene el elemento desde el índice pos hasta el índice medio en la matriz br.
Paso 4: Luego agregue el primer elemento de la matriz a la matriz br.
Paso 5: Si n es impar, agregue el último elemento de valor de la matriz a la matriz br.
Paso 6: Almacene el elemento desde el índice medio 1 hasta el índice 1 en la matriz br.
Paso 7: return br array.

A continuación se muestra la implementación del algoritmo anterior:

C ++

#include <iostream>

using namespace std;

 

int* rearrange(int* ar, int n)

{

    

    

    int* br = new int[n];

 

    

    int pos = n - 1;

 

    

    

    

    if (n % 2 != 0)

        pos = pos - 1;

 

    

    int mid = n / 2;

 

    

    int c = 0;

 

    

    

    

    for (; pos >= mid; pos--)

        br[c++] = ar[pos];

 

    

    

    br[c++] = ar[0];

 

    

    

    

    if (n % 2 != 0)

        br[c++] = ar[n - 1];

 

    

    

    for (; pos >= 1; pos--)

        br[c++] = ar[pos];

 

    

    return br;

}

int main()

{

    int ar[] = { 2, 8, 5, 9, 10 };

    int n = sizeof(ar) / sizeof(ar[0]);

 

    

    int* res = rearrange(ar, n);

 

    

    for (int i = 0; i < n; i++)

        cout << res[i] << " ";

}

Complejidad del tiempo: En)
Complejidad espacial: En)

¡Atención lectores! No dejes de aprender ahora. Obtenga todos los conceptos principales de DSA con el Curso de autoaprendizaje de DSA a un precio asequible para los estudiantes y apta para la industria. Para completar su preparación desde el aprendizaje de un idioma hasta DS Algo y mucho más, lea Toma el curso de preparación para entrevistas.

En caso de que quieras participar Clases en vivo con expertos, consulte Cursos en vivo de DSA para profesionales y Programación de competencias en vivo para estudiantes.

Source link