Reverse all elements of given circular array starting from index K

Given a circular array arr[] of size N and an index K, the task is to reverse all elements of the circular array starting from the index K.

Examples:

Input: arr[] = {3, 5, 2, 4, 1}, K = 2
Output: 4 2 5 3 1
Explanation:
After reversing the elements of the array from index K to K – 1, the modified arr[] is {4, 1, 2, 5, 3}.

Input: arr[] = {1, 2, 3, 4, 5}, K = 4
Output: 3 2 1 5 4
Explanation:
After reversing the elements of the array from index K to K – 1, the modified arr[] is {3, 2, 1, 5, 4}.

Approach: To solve the given problem, the idea is to use Two Pointers Approach. Follow the steps below to solve the problem:

• Initialize three variables start as K and end as (K – 1), to keep track of the boundary using two pointer approach, and count as N / 2.
• Iterate until the value of count is positive and perform the following steps:
• Swap the elements arr[start % N] and arr[end % N].
• Increment start by 1 and decrement end by 1. If end is equal to -1, then update end as (N – 1).
• Decrement count by 1.
• After the above steps, print the updated array obtained after the above steps.

Below is the implementation of the above approach:

C++

 `// C++ program for the above approach``#include ``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

 ``

Output:
`4 2 5 3 1`

Time Complexity: O(N)
Auxiliary Space: O(1)

Previous
Next