Dada una array, gire cíclicamente la array en el sentido de las agujas del reloj en uno.
Ejemplos:
Input: arr[] = {1, 2, 3, 4, 5} Output: arr[] = {5, 1, 2, 3, 4}
Los siguientes son pasos.
1) Almacene el último elemento en una variable, digamos x.
2) Desplace todos los elementos una posición por delante.
3) Reemplace el primer elemento de la array con x.
C++
// C++ code for program // to cyclically rotate // an array by one # include <iostream> using namespace std; void rotate(int arr[], int n) { int x = arr[n - 1], i; for (i = n - 1; i > 0; i--) arr[i] = arr[i - 1]; arr[0] = x; } // Driver code int main() { int arr[] = {1, 2, 3, 4, 5}, i; int n = sizeof(arr) / sizeof(arr[0]); cout << "Given array is "; for (i = 0; i < n; i++) cout << arr[i] << ' '; rotate(arr, n); cout << " Rotated array is "; for (i = 0; i < n; i++) cout << arr[i] << ' '; return 0; } // This code is contributed by jit_t
Given array is 1 2 3 4 5 Rotated array is 5 1 2 3 4
Complejidad de tiempo: O(n) Como necesitamos iterar a través de todos los elementos
Espacio auxiliar: O(1)
La pregunta anterior también se puede resolver usando el algoritmo de inversión .
Otro enfoque:
Podemos usar dos punteros, digamos i y j , que apuntan al primer y último elemento de la array, respectivamente. Como sabemos, en la rotación cíclica traeremos el último elemento al primero y desplazaremos el resto hacia adelante, así que comience a intercambiar arr[i] y arr[j] y mantenga j fijo y i moviéndose hacia j. Repita hasta que i no sea igual a j.
C++
#include <iostream> using namespace std; void rotate(int arr[], int n) { int i = 0, j = n-1; // i and j pointing to first and last element respectively while(i != j){ swap(arr[i], arr[j]); i++; } } // Driver code int main() { int arr[] = {1, 2, 3, 4, 5}, i; int n = sizeof(arr) / sizeof(arr[0]); cout << "Given array is \n"; for (i = 0; i < n; i++) cout << arr[i] << " "; rotate(arr, n); cout << "\nRotated array is\n"; for (i = 0; i < n; i++) cout << arr[i] << " "; return 0; }
Given array is 1 2 3 4 5 Rotated array is 5 1 2 3 4
Complejidad temporal: O(n)
Espacio auxiliar: O(1)
¡ Consulte el artículo completo sobre Programa para rotar cíclicamente una array en uno para obtener más detalles!
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA