Dada una array arr[], la tarea es imprimir la array formada al atravesar la array dada desde el primero hasta el último índice volteando la array completa después de imprimir cada elemento.
Ejemplo:
Entrada: arr = {0, 1, 2, 3, 4, 5}
Salida: 0 4 2 2 4 0
Explicación: En la primera iteración, se imprime el elemento en el índice 0 -> 0 y luego se voltea toda la array: { 0 , 1 , 2, 3, 4, 5} {5, 4, 3, 2, 1, 0}
En la segunda iteración, se imprime el elemento en el índice 1 -> 4 y luego se voltea toda la array: {5, 4 , 3, 2 , 1, 0} {0, 1, 2, 3, 4, 5}
En la tercera iteración, se imprime el elemento en el índice 2 -> 2 y luego se voltea toda la array: {0, 1, 2 , 3, 4, 5} {5, 4, 3, 2, 1, 0}
En la segunda iteración, se imprime el elemento en el índice 3 -> 2 y luego se voltea toda la array: {5, 4, 3, 2 , 1, 0} {0, 1 , 2, 3, 4, 5}
En el elemento de la segunda iteración en el índice 4 -> 4 se imprime, luego se voltea la array completa: {0, 1, 2, 3, 4 , 5} {5, 4, 3, 2, 1, 0}
En el elemento de la segunda iteración en se imprime el índice 5 -> 0 y luego se voltea toda la array: {5, 4, 3, 2, 1, 0 } {0, 1, 2, 3, 4, 5}Entrada: arr = {0, 1, 2, 3, 4}
Salida: 0 3 2 1 4
Enfoque: El problema dado se puede resolver utilizando la técnica de dos puntos . La idea es iterar la array de izquierda a derecha a partir del primer índice y de derecha a izquierda a partir del penúltimo índice.
Se pueden seguir los siguientes pasos para resolver el problema:
- Use el puntero uno para iterar la array de izquierda a derecha y use el puntero dos para recorrer la array de derecha a izquierda
- Imprima los elementos apuntados por ambos punteros simultáneamente e incremente el puntero uno por 2 y disminuya el puntero dos por 2
A continuación se muestra la implementación del enfoque anterior:
C++
// C++ code for the above approach #include <bits/stdc++.h> using namespace std; // Function to print array elements at // every index by flipping whole array // after printing every element void printFlip(vector<int> arr) { // Initialize length of the array int N = arr.size(); // Initialize both the pointers int p1 = 0, p2 = N - 2; // Iterate until both pointers // are not out of bounds while (p1 < N || p2 >= 0) { // Print the elements cout << arr[p1] << " "; if (p2 > 0) cout << arr[p2] << " "; // Increment p1 by 2 p1 += 2; // Decrement p2 by 2 p2 -= 2; } } // Driver code int main() { // Initialize the array vector<int> arr = { 0, 1, 2, 3, 4 }; // Call the function // and print the array printFlip(arr); return 0; } // This code is contributed by Potta Lokesh.
Java
// Java implementation for the above approach import java.io.*; import java.util.*; class GFG { // Function to print array elements at // every index by flipping whole array // after printing every element public static void printFlip(int[] arr) { // Initialize length of the array int N = arr.length; // Initialize both the pointers int p1 = 0, p2 = N - 2; // Iterate until both pointers // are not out of bounds while (p1 < N || p2 >= 0) { // Print the elements System.out.print(arr[p1] + " "); if (p2 > 0) System.out.print(arr[p2] + " "); // Increment p1 by 2 p1 += 2; // Decrement p2 by 2 p2 -= 2; } } // Driver code public static void main(String[] args) { // Initialize the array int[] arr = { 0, 1, 2, 3, 4 }; // Call the function // and print the array printFlip(arr); } }
Python3
# Python code for the above approach # Function to print array elements at # every index by flipping whole array # after printing every element def printFlip(arr): # Initialize length of the array N = len(arr); # Initialize both the pointers p1 = 0 p2 = N - 2; # Iterate until both pointers # are not out of bounds while (p1 < N or p2 >= 0): # Print the elements print(arr[p1], end=" "); if (p2 > 0): print(arr[p2], end=" "); # Increment p1 by 2 p1 += 2; # Decrement p2 by 2 p2 -= 2; # Driver Code # Initialize the array arr = [ 0, 1, 2, 3, 4 ]; # Call the function # and print the array printFlip(arr); # This code is contributed by gfgking.
C#
// C# implementation for the above approach using System; class GFG { // Function to print array elements at // every index by flipping whole array // after printing every element static void printFlip(int []arr) { // Initialize length of the array int N = arr.Length; // Initialize both the pointers int p1 = 0, p2 = N - 2; // Iterate until both pointers // are not out of bounds while (p1 < N || p2 >= 0) { // Print the elements Console.Write(arr[p1] + " "); if (p2 > 0) Console.Write(arr[p2] + " "); // Increment p1 by 2 p1 += 2; // Decrement p2 by 2 p2 -= 2; } } // Driver code public static void Main() { // Initialize the array int []arr = { 0, 1, 2, 3, 4 }; // Call the function // and print the array printFlip(arr); } } // This code is contributed by Samim Hossain Mondal.
Javascript
<script> // Javascript code for the above approach // Function to print array elements at // every index by flipping whole array // after printing every element function printFlip(arr) { // Initialize length of the array let N = arr.length; // Initialize both the pointers let p1 = 0, p2 = N - 2; // Iterate until both pointers // are not out of bounds while (p1 < N || p2 >= 0) { // Print the elements document.write(arr[p1] + " "); if (p2 > 0) document.write(arr[p2] + " "); // Increment p1 by 2 p1 += 2; // Decrement p2 by 2 p2 -= 2; } } // Driver Code // Initialize the array let arr = [ 0, 1, 2, 3, 4 ]; // Call the function // and print the array printFlip(arr); // This code is contributed by Samim Hossain Mondal. </script>
0 3 2 1 4
Complejidad temporal: O(N)
Espacio auxiliar: O(1)