Escribe una función rotar(arr[], d, n) que gire arr[] de tamaño n por d elementos.
Ejemplo :
Input : arr[] = [1, 2, 3, 4, 5, 6, 7] d = 2 Output : arr[] = [3, 4, 5, 6, 7, 1, 2]
La rotación de la array anterior por 2 hará que la array
Los primeros 3 métodos para rotar una array por d elementos se han discutido en esta publicación.
Método 4 (El algoritmo de inversión):
Algoritmo:
rotate(arr[], d, n) reverse(arr[], 1, d) ; reverse(arr[], d + 1, n); reverse(arr[], 1, n);
Sean AB las dos partes del arreglo de entrada donde A = arr[0..d-1] y B = arr[d..n-1]. La idea del algoritmo es:
- Invierta A para obtener ArB, donde Ar es el reverso de A.
- Invierta B para obtener ArBr, donde Br es el reverso de B.
- Invierta todo para obtener (ArBr) r = BA.
Ejemplo:
Sea la array arr[] = [1, 2, 3, 4, 5, 6, 7], d = 2 y n = 7
A = [1, 2] y B = [3, 4, 5, 6, 7]
- A inversa, obtenemos ArB = [2, 1, 3, 4, 5, 6, 7]
- Invertir B, obtenemos ArBr = [2, 1, 7, 6, 5, 4, 3]
- Invertir todo, obtenemos (ArBr)r = [3, 4, 5, 6, 7, 1, 2]
A continuación se muestra la implementación del enfoque anterior:
PHP
<?php // PHP program for reversal // algorithm of array rotation /* Function to left rotate arr of size n by d */ function leftRotate(&$arr, $d, $n) { if ($d == 0) return; // in case the rotating factor is // greater than array length $d = ($d % $n); reverseArray($arr, 0, $d - 1); reverseArray($arr, $d, $n - 1); reverseArray($arr, 0, $n - 1); } /*Function to reverse $arr from index start to end*/ function reverseArray(&$arr, $start, $end) { while ($start < $end) { $temp = $arr[$start]; $arr[$start] = $arr[$end]; $arr[$end] = $temp; $start++; $end--; } } // Function to // print an array function printArray($arr, $size) { for ($i = 0; $i < $size; $i++) print $arr[$i]." "; } // Driver code $arr = array(1, 2, 3, 4, 5, 6, 7); $n = sizeof($arr); $d = 2; // Function calling leftRotate($arr, $d, $n); printArray($arr, $n); // This code is contributed // by ChitraNayal ?>
Producción :
3 4 5 6 7 1 2
Complejidad de tiempo: O (n), donde n representa el tamaño de la array dada.
Espacio auxiliar: O(1), no se requiere espacio adicional, por lo que es una constante.
Consulte el artículo completo sobre el algoritmo de inversión para la rotación de array 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