# Print left rotation of array in O(n) time and O(1) space

Given an array of size n and multiple values around which we need to left rotate the array. How to quickly print 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

```

We have discussed a solution in below post.
Quickly find multiple left rotations of an array | Set 1
Method I:

The solution discussed above requires extra space. In this post, an optimized solution is discussed that doesn’t require extra space.

## C++

 `// CPP implementation of left rotation of` `// an array K number of times` `#include ` `using` `namespace` `std;`   `// Function to leftRotate array multiple times` `void` `leftRotate(``int` `arr[], ``int` `n, ``int` `k)` `{` `    ``/* To get the starting point of rotated array */` `    ``int` `mod = k % n;`   `    ``// Prints the rotated array from start position` `    ``for` `(``int` `i = 0; i < n; i++)` `        ``cout << (arr[(mod + i) % n]) << ``" "``;`   `    ``cout << ``"\n"``;` `}`   `// Driver Code` `int` `main()` `{` `    ``int` `arr[] = { 1, 3, 5, 7, 9 };` `    ``int` `n = ``sizeof``(arr) / ``sizeof``(arr);`   `    ``int` `k = 2;` `  `  `      ``// Function Call` `    ``leftRotate(arr, n, k);`   `    ``k = 3;` `  `  `      ``// Function Call` `    ``leftRotate(arr, n, k);`   `    ``k = 4;` `  `  `      ``// Function Call` `    ``leftRotate(arr, n, k);`   `    ``return` `0;` `}`

## Java

 `// JAVA implementation of left rotation` `// of an array K number of times` `import` `java.util.*;` `import` `java.lang.*;` `import` `java.io.*;`   `class` `arr_rot {` `    ``// Function to leftRotate array multiple` `    ``// times` `    ``static` `void` `leftRotate(``int` `arr[], ``int` `n, ``int` `k)` `    ``{` `        ``/* To get the starting point of` `        ``rotated array */` `        ``int` `mod = k % n;`   `        ``// Prints the rotated array from` `        ``// start position` `        ``for` `(``int` `i = ``0``; i < n; ++i)` `            ``System.out.print(arr[(i + mod) % n] + ``" "``);`   `        ``System.out.println();` `    ``}`   `    ``// Driver code` `    ``public` `static` `void` `main(String[] args)` `    ``{` `        ``int` `arr[] = { ``1``, ``3``, ``5``, ``7``, ``9` `};` `        ``int` `n = arr.length;`   `        ``int` `k = ``2``;` `      `  `          ``// Function Call` `        ``leftRotate(arr, n, k);`   `        ``k = ``3``;` `      `  `          ``// Function Call` `        ``leftRotate(arr, n, k);`   `        ``k = ``4``;` `      `  `          ``// Function Call` `        ``leftRotate(arr, n, k);` `    ``}` `}`   `// This code is contributed by Sanjal`

## Python

 `# Python implementation of left rotation of` `# an array K number of times`   `# Function to leftRotate array multiple times`     `def` `leftRotate(arr, n, k):`   `    ``# To get the starting point of rotated array` `    ``mod ``=` `k ``%` `n` `    ``s ``=` `""`   `    ``# Prints the rotated array from start position` `    ``for` `i ``in` `range``(n):` `        ``print` `str``(arr[(mod ``+` `i) ``%` `n]),` `    ``print` `    ``return`     `# Driver code` `arr ``=` `[``1``, ``3``, ``5``, ``7``, ``9``]` `n ``=` `len``(arr)` `k ``=` `2`   `# Function Call` `leftRotate(arr, n, k)`   `k ``=` `3`   `# Function Call` `leftRotate(arr, n, k)`   `k ``=` `4`   `# Function Call` `leftRotate(arr, n, k)`   `# This code is contributed by Sachin Bisht`

## C#

 `// C# implementation of left` `// rotation of an array K` `// number of times` `using` `System;`   `class` `GFG {`   `    ``// Function to leftRotate` `    ``// array multiple times` `    ``static` `void` `leftRotate(``int``[] arr, ``int` `n, ``int` `k)` `    ``{` `        ``// To get the starting` `        ``// point of rotated array` `        ``int` `mod = k % n;`   `        ``// Prints the rotated array` `        ``// from start position` `        ``for` `(``int` `i = 0; i < n; ++i)` `            ``Console.Write(arr[(i + mod) % n] + ``" "``);`   `        ``Console.WriteLine();` `    ``}`   `    ``// Driver Code` `    ``static` `public` `void` `Main()` `    ``{` `        ``int``[] arr = { 1, 3, 5, 7, 9 };` `        ``int` `n = arr.Length;`   `        ``int` `k = 2;` `      `  `          ``// Function Call` `        ``leftRotate(arr, n, k);`   `        ``k = 3;` `      `  `          ``// Function Call` `        ``leftRotate(arr, n, k);`   `        ``k = 4;` `      `  `          ``// Function Call` `        ``leftRotate(arr, n, k);` `    ``}` `}`   `// This code is contributed by m_kit`

## PHP

 ``

Output

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

```

Method II:

In the below implementation we will use Standard Template Library (STL) which will be making the solution more optimize and easy to Implement.

## C++

 `// C++ Implementation For Print Left Rotation Of Any Array K` `// Times`   `#include ` `#include ` `using` `namespace` `std;` `// Function For The k Times Left Rotation` `void` `leftRotate(``int` `arr[], ``int` `k, ``int` `n)` `{`   `    ``// Stl function rotates takes three parameters - the` `    ``// beginning,the position by which it should be rotated` `    ``// ,the end address of the array ` `      ``// The below function will be rotating the array left     ` `    ``// in linear time (k%arraySize) times` `    ``rotate(arr, arr + (k % n), arr + n);` `    `  `      ``// Print the rotated array from start position` `    ``for` `(``int` `i = 0; i < n; i++)` `        ``cout << arr[i] << ``" "``;` `    ``cout << ``"\n"``;` `}` `// Driver program` `int` `main()` `{` `    ``int` `arr[] = { 1, 3, 5, 7, 9 };` `    ``int` `n = ``sizeof``(arr) / ``sizeof``(arr);` `    ``int` `k = 2;` `  `  `      ``// Function Call` `    ``leftRotate(arr, k, n);`     `    ``return` `0;` `}`

## Java

 `// Java implementation for print left ` `// rotation of any array K times` `import` `java.io.*;` `import` `java.util.*;`   `class` `GFG{` `    `  `// Function for the k times left rotation` `static` `void` `leftRotate(Integer arr[], ``int` `k,` `                                      ``int` `n)` `{` `  `  `     ``// In Collection class rotate function ` `     ``// takes two parameters - the name of ` `     ``// array and the position by which it` `     ``// should be rotated` `     ``// The below function will be rotating` `     ``// the array left  in linear time` `     `  `     ``// Collections.rotate()rotate the` `     ``// array from right hence n-k` `    ``Collections.rotate(Arrays.asList(arr), n - k); ` `    `  `    ``// Print the rotated array from start position` `    ``for``(``int` `i = ``0``; i < n; i++)` `        ``System.out.print(arr[i] + ``" "``);` `}`   `// Driver code` `public` `static` `void` `main(String[] args) ` `{` `    ``Integer arr[] = { ``1``, ``3``, ``5``, ``7``, ``9` `};` `    ``int` `n = arr.length;` `    ``int` `k = ``2``; ` `    `  `    ``// Function call` `    ``leftRotate(arr, k, n);` `}` `}`   `// This code is contributed by chahattekwani71`

Output

```5 7 9 1 3

```

Note: the array itself gets updated after the rotation.

This article is contributed by Sridhar Babu and improved by Geetansh Sahni. 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

Article Tags :
Practice Tags :

32

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