# Quickly find multiple left rotations of an array | Set 1

Given an array of size n and multiple values around which we need to left rotate the array. How to quickly find multiple left rotations?

Examples:

```Input : arr[] = {1, 3, 5, 7, 9}
k1 = 1
k2 = 3
k3 = 4
k4 = 6
Output : 3 5 7 9 1
7 9 1 3 5
9 1 3 5 7
3 5 7 9 1

Input : arr[] = {1, 3, 5, 7, 9}
k1 = 14
Output : 9 1 3 5 7
```

## Recommended: Please solve it on “PRACTICE ” first, before moving on to the solution.

Simple Approach: We have already discussed different approaches in below posts.

The best of above approaches take O(n) time and O(1) extra space.

Efficient Approach:
The above approaches work well when there is single rotation required. The approaches also modify the original array. To handle multiple queries of array rotation, we use a temp array of size 2n and quickly handle rotations.

Step 1 : Copy the entire array two times in temp[0..2n-1] array.
Step 2 : Starting position of array after k rotations in temp[] will be k % n. We do k
Step 3 : Print temp[] array from k % n to k % n + n.

## C++

 `// CPP implementation of left rotation of ` `// an array K number of times ` `#include ` `using` `namespace` `std; ` ` `  `// Fills temp[] with two copies of arr[] ` `void` `preprocess(``int` `arr[], ``int` `n, ``int` `temp[]) ` `{ ` `    ``// Store arr[] elements at i and i + n ` `    ``for` `(``int` `i = 0; i

## Java

 `// Java implementation of left rotation of ` `// an array K number of times ` `class` `LeftRotate ` `{ ` `    ``// Fills temp[] with two copies of arr[] ` `    ``static` `void` `preprocess(``int` `arr[], ``int` `n, ` `                                   ``int` `temp[]) ` `    ``{ ` `        ``// Store arr[] elements at i and i + n ` `        ``for` `(``int` `i = ``0``; i

## Python3

 `# Python3 implementation of left rotation ` `# of an array K number of times ` ` `  `# Fills temp with two copies of arr ` `def` `preprocess(arr, n): ` `    ``temp ``=` `[``None``] ``*` `(``2` `*` `n) ` `     `  `    ``# Store arr elements at i and i + n ` `    ``for` `i ``in` `range``(n): ` `        ``temp[i] ``=` `temp[i ``+` `n] ``=` `arr[i] ` `    ``return` `temp ` ` `  `# Function to left rotate an array k times ` `def` `leftRotate(arr, n, k, temp): ` `     `  `    ``# Starting position of array after k ` `    ``# rotations in temp will be k % n ` `    ``start ``=` `k ``%` `n ` `     `  `    ``# Print array after k rotations ` `    ``for` `i ``in` `range``(start, start ``+` `n): ` `        ``print``(temp[i], end ``=` `" "``) ` `    ``print``("") ` ` `  `# Driver program ` `arr ``=` `[``1``, ``3``, ``5``, ``7``, ``9``] ` `n ``=` `len``(arr) ` `temp ``=` `preprocess(arr, n) ` ` `  `k ``=` `2` `leftRotate(arr, n, k, temp) ` `       `  `k ``=` `3` `leftRotate(arr, n, k, temp) ` `       `  `k ``=` `4` `leftRotate(arr, n, k, temp) ` ` `  `# This code is contributed by Sanghamitra Mishra  `

## C#

 `// Java implementation of left rotation of ` `// an array K number of times ` `using` `System; ` `class` `LeftRotate ` `{ ` `    ``// Fills temp[] with two copies of arr[] ` `    ``static` `void` `preprocess(``int` `[]arr, ``int` `n, ` `                                ``int``[] temp) ` `    ``{ ` `        ``// Store arr[] elements at i and i + n ` `        ``for` `(``int` `i = 0; i

## PHP

 ` `

Output:

```5 7 9 1 3
7 9 1 3 5
9 1 3 5 7
```

Note that the task to find starting address of rotation takes O(1) time. It is printing the elements that takes O(n) time.

Space optimized Approach : The above method takes extra space. Below given is the space optimized solution. Thanks to frenzy77 for suggesting this approach.

## C++

 `// CPP implementation of left rotation of ` `// an array K number of times ` `#include ` `using` `namespace` `std; ` ` `  `// Function to left rotate an array k times ` `void` `leftRotate(``int` `arr[], ``int` `n, ``int` `k) ` `{ ` `    ``// Print array after k rotations ` `    ``for` `(``int` `i = k; i < k + n; i++) ` `        ``cout << arr[i%n] << ``" "``; ` `} ` ` `  `// Driver program ` `int` `main() ` `{ ` `    ``int` `arr[] = {1, 3, 5, 7, 9}; ` `    ``int` `n = ``sizeof``(arr) / ``sizeof``(arr); ` ` `  `    ``int` `k = 2; ` `    ``leftRotate(arr, n, k); ` `    ``cout << endl; ` ` `  `    ``k = 3; ` `    ``leftRotate(arr, n, k); ` `    ``cout << endl; ` ` `  `    ``k = 4; ` `    ``leftRotate(arr, n, k); ` `    ``cout << endl; ` ` `  `    ``return` `0; ` `} `

## Java

 `// Java implementation of  ` `// left rotation of an  ` `// array K number of times ` ` `  `import` `java.io.*; ` ` `  `class` `GFG ` `{ ` ` `  `// Function to left rotate ` `// an array k times ` `static` `void` `leftRotate(``int` `arr[],  ` `                       ``int` `n, ``int` `k) ` `{ ` `    ``// Print array after ` `    ``// k rotations ` `    ``for` `(``int` `i = k; i < k + n; i++) ` `        ``System.out.print(arr[i % n] + ``" "``); ` `} ` ` `  `// Driver Code ` `public` `static` `void` `main (String[] args) ` `{ ` `    ``int` `arr[] = {``1``, ``3``, ``5``, ``7``, ``9``}; ` `    ``int` `n = arr.length; ` `     `  `    ``int` `k = ``2``; ` `    ``leftRotate(arr, n, k); ` `    ``System.out.println(); ` `     `  `    ``k = ``3``; ` `    ``leftRotate(arr, n, k); ` `    ``System.out.println(); ` `     `  `    ``k = ``4``; ` `    ``leftRotate(arr, n, k); ` `    ``System.out.println();  ` `} ` `} ` ` `  `// This code is contributed by ajit `

## Python 3

 `# Python3 implementation of  ` `# left rotation of an array  ` `# K number of times  ` ` `  `# Function to left rotate ` `# an array k times ` `def` `leftRotate(arr, n, k): ` `     `  `    ``# Print array  ` `    ``# after k rotations ` `    ``for` `i ``in` `range``(k, k ``+` `n): ` `        ``print``(``str``(arr[i ``%` `n]),  ` `                   ``end ``=` `" "``) ` ` `  `# Driver Code ` `arr ``=` `[``1``, ``3``, ``5``, ``7``, ``9``] ` `n ``=` `len``(arr) ` `k ``=` `2``; ` `leftRotate(arr, n, k) ` `print``() ` ` `  `k ``=` `3``; ` `leftRotate(arr, n, k) ` `print``() ` ` `  `k ``=` `4` `leftRotate(arr, n, k) ` `print``() ` ` `  `# This code is contributed  ` `# by ChitraNayal `

## C#

 `// C# implementation of  ` `// left rotation of an  ` `// array K number of times ` `using` `System; ` ` `  `class` `GFG ` `{ ` ` `  `// Function to left rotate ` `// an array k times ` `static` `void` `leftRotate(``int` `[]arr,  ` `                       ``int` `n, ``int` `k) ` `{ ` `    ``// Print array after ` `    ``// k rotations ` `    ``for` `(``int` `i = k; i < k + n; i++) ` `        ``Console.Write(arr[i % n] + ``" "``); ` `} ` ` `  `// Driver Code ` `static` `public` `void` `Main () ` `{ ` `int` `[]arr = {1, 3, 5, 7, 9}; ` `int` `n = arr.Length; ` ` `  `int` `k = 2; ` `leftRotate(arr, n, k); ` `Console.WriteLine(); ` ` `  `k = 3; ` `leftRotate(arr, n, k); ` `Console.WriteLine(); ` ` `  `k = 4; ` `leftRotate(arr, n, k); ` `Console.WriteLine();  ` `} ` `} ` ` `  `// This code is contributed  ` `// by akt_mit `

## PHP

 ` `

Output:

```5 7 9 1 3
7 9 1 3 5
9 1 3 5 7
```

This article is contributed by nuclode and Rohit Thapliyal. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

My Personal Notes arrow_drop_up

Improved By : jit_t, chitranayal

Article Tags :
Practice Tags :

43

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.