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++

filter_none

edit
close

play_arrow

link
brightness_4
code

// CPP implementation of left rotation of
// an array K number of times
#include <bits/stdc++.h>
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[0]);
 
    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;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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

chevron_right


Python

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// PHP implementation of
// left rotation of an
// array K number of times
 
// Function to leftRotate
// array multiple times
function leftRotate($arr, $n, $k)
{
    // To get the starting
    // point of rotated array
    $mod = $k % $n;
 
    // Prints the rotated array
    // from start position
    for ($i = 0; $i < $n; $i++)
        echo ($arr[($mod +
                    $i) % $n]) , " ";
 
    echo "\n";
}
 
// Driver Code
$arr = array(1, 3, 5, 7, 9);
$n = sizeof($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 m_kit
?>

chevron_right


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++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ Implementation For Print Left Rotation Of Any Array K
// Times
 
#include <bits/stdc++.h>
#include <iostream>
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[0]);
    int k = 2;
   
      // Function Call
    leftRotate(arr, k, n);
 
 
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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

chevron_right


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.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
 

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.