Imprime la rotación a la izquierda de la array en el tiempo O (n) y el espacio O (1)

Dada una array de tamaño n y múltiples valores alrededor de los cuales necesitamos rotar la array a la izquierda. ¿Cómo imprimir rápidamente múltiples rotaciones a la izquierda?

Ejemplos: 

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

Hemos discutido una solución en la siguiente publicación. 
Encuentre rápidamente múltiples rotaciones a la izquierda de una array | Serie 1

Método I: La solución discutida anteriormente requiere espacio adicional. En esta publicación, se analiza una solución optimizada que no requiere espacio adicional.

Implementación:

C++

// C++ 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;
}

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

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

Javascript

<script>
// JavaScript 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 */
    let mod = k % n;
 
    // Prints the rotated array from start position
    for (let i = 0; i < n; i++)
        document.write((arr[(mod + i) % n]) + " ");
 
    document.write("\n");
}
 
// Driver Code
let arr = [ 1, 3, 5, 7, 9 ];
let n = arr.length;
 
let k = 2;
// Function Call
leftRotate(arr, n, k);
document.write("<br>");
 
k = 3;
// Function Call
leftRotate(arr, n, k);
document.write("<br>");
 
k = 4;
// Function Call
leftRotate(arr, n, k);
 
</script>
Producción

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

Complejidad de tiempo: O (N) , ya que estamos usando un bucle para atravesar N veces.
Espacio auxiliar: O(1), ya que no estamos utilizando ningún espacio adicional.

Método II: En la siguiente implementación, utilizaremos la Biblioteca de plantillas estándar (STL), que hará que la solución sea más optimizada y fácil de implementar.

Implementación:

C++

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

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

Python3

# Python3 implementation to print left
# rotation of any array K times
from collections import deque
 
# Function For The k Times Left Rotation
def leftRotate(arr, k, n):
     
    # The collections module has deque class
    # which provides the rotate(), which is
    # inbuilt function to allow rotation
    arr = deque(arr)
     
    # using rotate() to left rotate by k
    arr.rotate(-k)
    arr = list(arr)
     
    # Print the rotated array from
    # start position
    for i in range(n):
        print(arr[i], end = " ")
 
# Driver Code
if __name__ == '__main__':
       
    arr = [ 1, 3, 5, 7, 9 ]
    n = len(arr)
    k = 2
   
    # Function Call
    leftRotate(arr, k, n)
 
# This code is contributed by math_lover

C#

// C# program for the above approach
using System;
 
class GFG
{
    static void leftRotate(int[] arr, int d,
                           int n)
    {
        for (int i = 0; i < d; i++)
            leftRotatebyOne(arr, n);
    }
  
    static void leftRotatebyOne(int[] arr, int n)
    {
        int i, temp = arr[0];
        for (i = 0; i < n - 1; i++)
            arr[i] = arr[i + 1];
  
        arr[n - 1] = temp;
    }
  
    /* utility function to print an array */
    static void printArray(int[] arr, int size)
    {
        for (int i = 0; i < size; i++)
            Console.Write(arr[i] + " ");
    }
 
// Driver Code
public static void Main()
{
    int[] arr = { 1, 3, 5, 7, 9 };
    int n = arr.Length;
    int k = 2;
     
    // Function call
    leftRotate(arr, k, n);
    printArray(arr, n);
}
}
 
// This code is contributed by avijitmondal1998.

Javascript

<script>
// Javascript program for the above approach
function leftRotate(arr, d, n)
{
    for (let i = 0; i < d; i++)
        leftRotatebyOne(arr, n);
}
  
function leftRotatebyOne(arr, n)
{
    let i, temp = arr[0];
    for (i = 0; i < n - 1; i++)
        arr[i] = arr[i + 1];
  
    arr[n - 1] = temp;
}
  
/* utility function to print an array */
function printArray(arr, size)
{
    for (let i = 0; i < size; i++)
        document.write(arr[i] + " ");
}
 
// Driver Code
let arr = [ 1, 3, 5, 7, 9 ];
let n = arr.length;
let k = 2;
     
// Function call
leftRotate(arr, k, n);
printArray(arr, n);
 
// This code is contributed by Samim Hossain Mondal.
</script>
Producción

5 7 9 1 3 

Nota: la array en sí se actualiza después de la rotación.

Complejidad temporal: O(n)
Espacio auxiliar: O(1)

Este artículo es una contribución de Sridhar Babu y mejorado por Geetansh Sahni. Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks. 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *