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

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 program
int main()
{
    int arr[] = { 1, 3, 5, 7, 9 };
    int n = sizeof(arr) / sizeof(arr[0]);
  
    int k = 2;
    leftRotate(arr, n, k);
  
    k = 3;
    leftRotate(arr, n, k);
  
    k = 4;
    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 program
    public static void main (String[] args) 
    {
            int arr[] = { 1, 3, 5, 7, 9 };
            int n = arr.length; 
  
            int k = 2;
            leftRotate(arr, n, k);
  
            k = 3;
            leftRotate(arr, n, k);
  
            k = 4;
            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 program
arr = [ 1, 3, 5, 7, 9 ]
n = len(arr)
k = 2
leftRotate(arr, n, k)
  
k = 3
leftRotate(arr, n, k)
  
k = 4
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;
        leftRotate(arr, n, k);
      
        k = 3;
        leftRotate(arr, n, k);
      
        k = 4;
        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;
leftRotate($arr, $n, $k);
  
$k = 3;
leftRotate($arr, $n, $k);
  
$k = 4;
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 

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



My Personal Notes arrow_drop_up

Improved By : jit_t



Article Tags :
Practice Tags :


9


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