Dada una array arr[] de enteros y otro entero D , la tarea es realizar D rotaciones a la izquierda en la array e imprimir la array modificada.
Ejemplos:
Input: arr[] = {1, 2, 3, 4, 5, 6}, D = 2 Output: 3 4 5 6 1 2 Input: arr[] = {1, 2, 3, 4, 5, 6}, D = 12 Output: 1 2 3 4 5 6
Enfoque: Usando vectores en C++, se puede realizar una rotación quitando el primer elemento del vector y luego insertándolo al final del mismo vector. De manera similar, se pueden realizar todas las rotaciones requeridas y luego imprimir el contenido del vector modificado para obtener la array rotada requerida.
A continuación se muestra la implementación del enfoque anterior:
CPP
// C++ implementation of the approach #include <bits/stdc++.h> using namespace std; // Function to left rotate the array by d elements // here we are passing vector by reference to avoid copying // that just make our program slow void rotate(vector<int>& vec, int d) { // Base case if (d == 0) return; // Push first d elements from the beginning // to the end and remove those elements // from the beginning for (int i = 0; i < d; i++) { // adding first element at // the end of vector vec.push_back(vec[0]); // removing first element vec.erase(vec.begin()); } // Print the rotated array for (int i = 0; i < vec.size(); i++) { cout << vec[i] << " "; } } // Driver code int main() { vector<int> vec = { 1, 2, 3, 4, 5, 6 }; int n = vec.size(); int d = 2; // Function call rotate(vec, d % n); return 0; }
Producción
3 4 5 6 1 2
Complejidad temporal: O(n)
Espacio auxiliar: O(1)