Array obtenida invirtiendo repetidamente la array después de cada inserción de una array dada

Dada una array arr[] , la tarea es imprimir la array obtenida al insertar elementos de arr[] uno por uno en una array inicialmente vacía, digamos arr1[] , e invertir la array arr1[] después de cada inserción.

Ejemplos:

Entrada: arr[] = {1, 2, 3, 4}
Salida: 4 2 1 3
Explicación:
Operaciones realizadas en el arreglo arr1[] de la siguiente manera:
Paso 1: Agregar 1 al arreglo e invertirlo. arr1[] = {1}
Paso 2: agregue 2 a la array e inviértalo. arr1[] = {2, 1}
Paso 3: agregue 3 en la array e inviértalo. arr1[] = {3, 1, 2}
Paso 3: agregue 4 en la array e inviértalo. arr1[] = {4, 2, 1, 3}

Entrada: arr[] = {1, 2, 3}
Salida: 3 1 2
Explicación:
Operaciones realizadas en el arreglo arr1[] de la siguiente manera:
Paso 1: Agregar 1 al arreglo e invertirlo. arr1[] = {1}
Paso 2: agregue 2 a la array e inviértalo. arr1[] = {2, 1}
Paso 3: agregue 3 en la array e inviértalo. arr1[] = {3, 1, 2}

 

Enfoque ingenuo: el enfoque más simple para resolver el problema es iterar sobre la array arr[] e insertar cada elemento de arr[] uno por uno en la array arr1[] e invertir la array arr1[] después de cada inserción. 

Complejidad de Tiempo: O(N 2 )
Espacio Auxiliar: O(1)

Enfoque eficiente: para optimizar el enfoque anterior, la idea es utilizar la cola de dos extremos (Deque) para agregar los elementos en ambos extremos. Siga los pasos a continuación para resolver el problema:

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

C++

// C++ program of the above approach
 
#include <bits/stdc++.h>
using namespace std;
 
// Function to generate the array by
// inserting array elements one by one
// followed by reversing the array
void generateArray(int arr[], int n)
{
 
    // Doubly ended Queue
    deque<int> ans;
 
    // Iterate over the array
    for (int i = 0; i < n; i++) {
 
        // Push array elements
        // alternately to the front
        // and back
        if (i & 1)
            ans.push_front(arr[i]);
        else
            ans.push_back(arr[i]);
    }
 
    // If size of list is odd
    if (n & 1) {
 
        // Reverse the list
        reverse(ans.begin(),
                ans.end());
    }
 
    // Print the elements
    // of the array
    for (auto x : ans) {
        cout << x << " ";
    }
    cout << endl;
}
 
// Driver Code
int32_t main()
{
    int n = 4;
    int arr[n] = { 1, 2, 3, 4 };
    generateArray(arr, n);
    return 0;
}

Java

// Java program of the above approach
import java.io.*;
import java.util.*;
 
class GFG{
     
// Function to generate the array by
// inserting array elements one by one
// followed by reversing the array
static void generateArray(int arr[], int n)
{
     
    // Doubly ended Queue
    Deque<Integer> ans = new LinkedList<>();
  
    // Iterate over the array
    for(int i = 0; i < n; i++)
    {
         
        // Push array elements
        // alternately to the front
        // and back
        if ((i & 1) != 0)
            ans.addFirst(arr[i]);
        else
            ans.add(arr[i]);
    }
  
    // If size of list is odd
    if ((n & 1) != 0)
    {
         
        // Reverse the list
        Collections.reverse(Arrays.asList(ans));
    }
  
    // Print the elements
    // of the array
    for(int x : ans)
    {
        System.out.print(x + " ");
    }
    System.out.println();
}
  
// Driver Code
public static void main (String[] args)
{
    int n = 4;
    int arr[] = { 1, 2, 3, 4 };
     
    generateArray(arr, n);
}
}
 
// This code is contributed by code_hunt

Python3

# Python3 program of the above approach
from collections import deque
 
# Function to generate the array by
# inserting array elements one by one
# followed by reversing the array
def generateArray(arr, n):
  
    # Doubly ended Queue
    ans = deque()
  
    # Iterate over the array
    for i in range(n):
  
        # Push array elements
        # alternately to the front
        # and back
        if (i & 1 != 0):
            ans.appendleft(arr[i])
        else:
            ans.append(arr[i])
     
    # If size of list is odd
    if (n & 1 != 0):
  
        # Reverse the list
        ans.reverse()
     
    # Print the elements
    # of the array
    for x in ans:
        print(x, end = " ")
     
    print()
 
# Driver Code
n = 4
arr = [ 1, 2, 3, 4 ]
 
generateArray(arr, n)
 
# This code is contributed by code_hunt

C#

// C# program of
// the above approach
using System;
using System.Collections.Generic;
class GFG{
     
// Function to generate the array
// by inserting array elements
// one by one followed by
// reversing the array
static void generateArray(int []arr,
                          int n)
{   
  // Doubly ended Queue
  List<int> ans = new List<int>();
 
  // Iterate over the array
  for(int i = 0; i < n; i++)
  {
    // Push array elements
    // alternately to the front
    // and back
    if ((i & 1) != 0)
      ans.Insert(0, arr[i]);
    else
      ans.Add(arr[i]);
  }
 
  // If size of list is odd
  if ((n & 1) != 0)
  {
    // Reverse the list
    ans.Reverse();
  }
 
  // Print the elements
  // of the array
  foreach(int x in ans)
  {
    Console.Write(x + " ");
  }
  Console.WriteLine();
}
  
// Driver Code
public static void Main(String[] args)
{
  int n = 4;
  int []arr = {1, 2, 3, 4};
  generateArray(arr, n);
}
}
 
// This code is contributed by 29AjayKumar

Javascript

<script>
 
// Javascript program of the above approach
 
// Function to generate the array by
// inserting array elements one by one
// followed by reversing the array
function generateArray(arr, n)
{
 
    // Doubly ended Queue
    var ans = [];
 
    // Iterate over the array
    for (var i = 0; i < n; i++) {
 
        // Push array elements
        // alternately to the front
        // and back
        if (i & 1)
            ans.splice(0,0,arr[i]);
        else
            ans.push(arr[i]);
    }
 
    // If size of list is odd
    if (n & 1) {
 
        // Reverse the list
        ans.reverse();
    }
 
    // Print the elements
    // of the array
    ans.forEach(x => {
 
        document.write( x + " ");
    });
}
 
// Driver Code
var n = 4;
var arr =  [1, 2, 3, 4];
generateArray(arr, n);
 
</script>
Producción: 

4 2 1 3

 

Complejidad temporal: O(N)
Espacio auxiliar: O(N)

Publicación traducida automáticamente

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