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>
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