Invierta todos los elementos de la array circular dada a partir del índice K

Dada una array circular arr[] de tamaño N y un índice K , la tarea es invertir todos los elementos de la array circular a partir del índice K .

Ejemplos:

Entrada: arr[] = {3, 5, 2, 4, 1}, K = 2
Salida: 4 2 5 3 1
Explicación:
después de invertir los elementos de la array del índice K a K – 1, el arr[] modificado es {4, 1, 2, 5, 3} .

Entrada: arr[] = {1, 2, 3, 4, 5}, K = 4
Salida: 3 2 1 5 4
Explicación:
después de invertir los elementos de la array del índice K a K – 1, el arr[] modificado es {3, 2, 1, 5, 4} .

Enfoque: Para resolver el problema dado, la idea es utilizar el enfoque de dos punteros . Siga los pasos a continuación para resolver el problema:

  • Inicialice tres variables que comiencen como K y terminen como (K – 1) , para realizar un seguimiento del límite utilizando el enfoque de dos punteros , y cuenten como N / 2 .
  • Iterar hasta que el valor de count sea positivo y realizar los siguientes pasos:
    • Intercambia los elementos arr[start % N] y arr[end % N] .
    • Incrementa el inicio en 1 y decrementa el final en 1 . Si end es igual a -1 , actualice end como (N – 1) .
    • Decrementa el conteo en 1.
  • Después de los pasos anteriores, imprima la array actualizada obtenida después de los pasos anteriores.

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

C++

// C++ program for the above approach
#include <bits/stdc++.h>
using namespace std;
 
// Function to print the array arr[]
void printArray(int arr[], int N)
{
    // Print the array
    for (int i = 0; i < N; i++)
    {
        cout << arr[i] << " ";
    }
}
 
// Function to reverse elements of given
// circular array starting from index k
void reverseCircularArray(int arr[],
                          int N, int K)
{
    // Initialize two variables as
    // start = k and end = k-1
    int start = K, end = K - 1;
 
    // Initialize count = N/2
    int count = N / 2;
 
    // Loop while count > 0
    while (count--) {
 
        // Swap the elements at index
        // (start%N) and (end%N)
        int temp = arr[start % N];
        arr[start % N] = arr[end % N];
        arr[end % N] = temp;
 
        // Update the start and end
        start++;
        end--;
 
        // If end equals to -1
        // set end = N-1
        if (end == -1) {
            end = N - 1;
        }
    }
 
    // Print the circular array
    printArray(arr, N);
}
 
// Driver Code
int main()
{
    int arr[] = { 3, 5, 2, 4, 1 };
    int K = 2;
    int N = sizeof(arr) / sizeof(arr[0]);
 
    // Function Call
    reverseCircularArray(arr, N, K);
 
    return 0;
}

Java

// Java program for the above approach
class GFG {
 
  // Function to print the array arr[]
  static void printArray(int arr[], int N)
  {
 
    // Print the array
    for (int i = 0; i < N; i++)
    {
      System.out.print(arr[i] + " ");
    }
  }
 
  // Function to reverse elements of given
  // circular array starting from index k
  static void reverseCircularArray(int arr[],
                                   int N, int K)
  {
 
    // Initialize two variables as
    // start = k and end = k-1
    int start = K, end = K - 1;
 
    // Initialize count = N/2
    int count = N / 2;
 
    // Loop while count > 0
    while (count != 0)
    {
 
      // Swap the elements at index
      // (start%N) and (end%N)
      int temp = arr[start % N];
      arr[start % N] = arr[end % N];
      arr[end % N] = temp;
 
      // Update the start and end
      start++;
      end--;
 
      // If end equals to -1
      // set end = N-1
      if (end == -1)
      {
        end = N - 1;
      }           
      count -= 1;
    }
 
    // Print the circular array
    printArray(arr, N);
  }
 
  // Driver Code
  public static void main (String[] args)
  {
    int arr[] = { 3, 5, 2, 4, 1 };
    int K = 2;
    int N = arr.length;
 
    // Function Call
    reverseCircularArray(arr, N, K);  
  }
}
 
// This code is contributed by AnkThon

Python3

# Python3 program for the above approach
 
# Function to print array arr[]
def printArray(arr, N):
     
    # Print the array
    for i in range(N):
        print(arr[i], end = " ")
 
# Function to reverse elements of given
# circular array starting from index k
def reverseCircularArray(arr, N, K):
     
    # Initialize two variables as
    # start = k and end = k-1
    start, end = K, K - 1
 
    # Initialize count = N/2
    count = N // 2
 
    # Loop while count > 0
    while (count):
         
        # Swap the elements at index
        # (start%N) and (end%N)
        temp = arr[start % N]
        arr[start % N] = arr[end % N]
        arr[end % N] = temp
 
        # Update the start and end
        start += 1
        end -= 1
 
        # If end equals to -1
        # set end = N-1
        if (end == -1):
            end = N - 1
             
        count -= 1
 
    # Print the circular array
    printArray(arr, N)
 
# Driver Code
if __name__ == '__main__':
     
    arr = [ 3, 5, 2, 4, 1 ]
    K = 2
    N = len(arr)
     
    # Function Call
    reverseCircularArray(arr, N, K)
 
# This code is contributed by mohit kumar 29

C#

// C# program for the above approach
using System;
class GFG
{
 
  // Function to print the array []arr
  static void printArray(int []arr, int N)
  {
 
    // Print the array
    for (int i = 0; i < N; i++)
    {
      Console.Write(arr[i] + " ");
    }
  }
 
  // Function to reverse elements of given
  // circular array starting from index k
  static void reverseCircularArray(int []arr,
                                   int N, int K)
  {
 
    // Initialize two variables as
    // start = k and end = k-1
    int start = K, end = K - 1;
 
    // Initialize count = N/2
    int count = N / 2;
 
    // Loop while count > 0
    while (count != 0)
    {
 
      // Swap the elements at index
      // (start%N) and (end%N)
      int temp = arr[start % N];
      arr[start % N] = arr[end % N];
      arr[end % N] = temp;
 
      // Update the start and end
      start++;
      end--;
 
      // If end equals to -1
      // set end = N-1
      if (end == -1)
      {
        end = N - 1;
      }           
      count -= 1;
    }
 
    // Print the circular array
    printArray(arr, N);
  }
 
  // Driver Code
  public static void Main(String[] args)
  {
    int []arr = { 3, 5, 2, 4, 1 };
    int K = 2;
    int N = arr.Length;
 
    // Function Call
    reverseCircularArray(arr, N, K);  
  }
}
 
// This code is contributed by 29AjayKumar

Javascript

<script>
 
// JavaScript program for the above approach
 
// Function to print the array arr[]
function printArray(arr, N)
{
    // Print the array
    for (let i = 0; i < N; i++)
    {
        document.write(arr[i] + " ");
    }
}
 
// Function to reverse elements of given
// circular array starting from index k
function reverseCircularArray(arr, N, K)
{
    // Initialize two variables as
    // start = k and end = k-1
    let start = K, end = K - 1;
 
    // Initialize count = N/2
    let count = Math.floor(N / 2);
 
    // Loop while count > 0
    while (count--) {
 
        // Swap the elements at index
        // (start%N) and (end%N)
        let temp = arr[start % N];
        arr[start % N] = arr[end % N];
        arr[end % N] = temp;
 
        // Update the start and end
        start++;
        end--;
 
        // If end equals to -1
        // set end = N-1
        if (end === -1) {
            end = N - 1;
        }
    }
 
    // Print the circular array
    printArray(arr, N);
}
 
// Driver Code
    let arr = [ 3, 5, 2, 4, 1 ];
    let K = 2;
    let N = arr.length;
 
    // Function Call
    reverseCircularArray(arr, N, K);
 
// This code is contributed by Surbhi Tyagi.
 
</script>
Producción: 

4 2 5 3 1

 

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

Publicación traducida automáticamente

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