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

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[0]); ` ` `  `    ``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
```

## tags:

Arrays rotation Arrays