Hay una array dada y se divide desde una posición específica, se mueve la primera parte dividida de la array y luego se agrega al final de la array.
Ejemplos:
Input : arr[] = {12, 10, 5, 6, 52, 36} k = 2 Output : arr[] = {5, 6, 52, 36, 12, 10} Explanation : here k is two so first two elements are splitted and they are added at the end of array Input : arr[] = {3, 1, 2} k = 1 Output : arr[] = {1, 2, 3} Explanation :here k is one so first one element are splitted and it is added at the end of array
Solución simple: rotaremos los elementos de la array uno por uno.
Implementación:
C
// CPP program to split array and move first // part to end. #include <stdio.h> void splitArr(int arr[], int n, int k) { for (int i = 0; i < k; i++) { // Rotate array by 1. int x = arr[0]; for (int j = 0; j < n - 1; ++j) arr[j] = arr[j + 1]; arr[n - 1] = x; } } // Driver code int main() { int arr[] = { 12, 10, 5, 6, 52, 36 }; int n = sizeof(arr) / sizeof(arr[0]); int position = 2; splitArr(arr, n, position); for (int i = 0; i < n; ++i) printf("%d ", arr[i]); return 0; }
C++
// CPP program to split array and move first // part to end. #include <iostream> using namespace std; void splitArr(int arr[], int n, int k) { for (int i = 0; i < k; i++) { // Rotate array by 1. int x = arr[0]; for (int j = 0; j < n - 1; ++j) arr[j] = arr[j + 1]; arr[n - 1] = x; } } // Driver code int main() { int arr[] = { 12, 10, 5, 6, 52, 36 }; int n = sizeof(arr) / sizeof(arr[0]); int position = 2; splitArr(arr, n, position); for (int i = 0; i < n; ++i) cout <<" "<< arr[i]; return 0; } // This code is contributed by shivanisinghss2110
Java
// Java program to split array and move first // part to end. import java.util.*; import java.lang.*; class GFG { public static void splitArr(int arr[], int n, int k) { for (int i = 0; i < k; i++) { // Rotate array by 1. int x = arr[0]; for (int j = 0; j < n - 1; ++j) arr[j] = arr[j + 1]; arr[n - 1] = x; } } // Driver code public static void main(String[] args) { int arr[] = { 12, 10, 5, 6, 52, 36 }; int n = arr.length; int position = 2; splitArr(arr, n, position); for (int i = 0; i < n; ++i) System.out.print(arr[i] + " "); } } // Code Contributed by Mohit Gupta_OMG <(0_o)>
Python3
# Python program to split array and move first # part to end. def splitArr(arr, n, k): for i in range(0, k): x = arr[0] for j in range(0, n-1): arr[j] = arr[j + 1] arr[n-1] = x # main arr = [12, 10, 5, 6, 52, 36] n = len(arr) position = 2 splitArr(arr, n, position) for i in range(0, n): print(arr[i], end = ' ') # Code Contributed by Mohit Gupta_OMG <(0_o)>
C#
// C# program to split array // and move first part to end. using System; class GFG { // Function to split array and // move first part to end public static void splitArr(int[] arr, int n, int k) { for (int i = 0; i < k; i++) { // Rotate array by 1. int x = arr[0]; for (int j = 0; j < n - 1; ++j) arr[j] = arr[j + 1]; arr[n - 1] = x; } } // Driver code public static void Main() { int[] arr = {12, 10, 5, 6, 52, 36}; int n = arr.Length; int position = 2; splitArr(arr, n, position); for (int i = 0; i < n; ++i) Console.Write(arr[i] + " "); } } // This code is contributed by Shrikant13.
PHP
<?php // PHP program to split array // and move first part to end. function splitArr(&$arr, $n, $k) { for ($i = 0; $i < $k; $i++) { // Rotate array by 1. $x = $arr[0]; for ($j = 0; $j < $n - 1; ++$j) $arr[$j] = $arr[$j + 1]; $arr[$n - 1] = $x; } } // Driver code $arr = array(12, 10, 5, 6, 52, 36); $n = sizeof($arr); $position = 2; splitArr($arr, n, $position); for ($i = 0; $i < $n; ++$i) echo $arr[$i]." "; // This code is contributed // by ChitraNayal ?>
Javascript
<script> // JavaScript program to split // array and move first // part to end. function splitArr(arr, n, k){ for (let i = 0; i < k; i++) { // Rotate array by 1. let x = arr[0]; for (let j = 0; j < n - 1; ++j) arr[j] = arr[j + 1]; arr[n - 1] = x; } } // Driver code let arr = [ 12, 10, 5, 6, 52, 36 ]; let n = arr.length; let position = 2; splitArr(arr, n, position); for (let i = 0; i < n; ++i) document.write(arr[i]+" "); </script>
5 6 52 36 12 10
Complejidad temporal: O(n).
Complejidad del espacio : O(1)
Otro enfoque: otro enfoque es hacer una array temporal con el doble de tamaño y copiar nuestro elemento de array en una nueva array dos veces. Y luego copiar el elemento de la nueva array a nuestra array tomando la rotación como índice inicial hasta la longitud de nuestra array.
A continuación se muestra la implementación del enfoque anterior.
C++
// CPP program to split array and move first // part to end. #include <bits/stdc++.h> using namespace std; // Function to split array and // move first part to end void splitArr(int arr[], int length, int rotation) { int tmp[length * 2] = {0}; for(int i = 0; i < length; i++) { tmp[i] = arr[i]; tmp[i + length] = arr[i]; } for(int i = rotation; i < rotation + length; i++) { arr[i - rotation] = tmp[i]; } } // Driver code int main() { int arr[] = { 12, 10, 5, 6, 52, 36 }; int n = sizeof(arr) / sizeof(arr[0]); int position = 2; splitArr(arr, n, position); for (int i = 0; i < n; ++i) printf("%d ", arr[i]); return 0; } // This code is contributed by YashKhandelwal8
Java
// Java program to split array and move first // part to end. import java.util.*; import java.lang.*; class GFG { // Function to split array and // move first part to end public static void SplitAndAdd(int[] A,int length,int rotation){ //make a temporary array with double the size int[] tmp = new int[length*2]; // copy array element in to new array twice System.arraycopy(A, 0, tmp, 0, length); System.arraycopy(A, 0, tmp, length, length); for(int i=rotation;i<rotation+length;i++) A[i-rotation]=tmp[i]; } // Driver code public static void main(String[] args) { int arr[] = { 12, 10, 5, 6, 52, 36 }; int n = arr.length; int position = 2; SplitAndAdd(arr, n, position); for (int i = 0; i < n; ++i) System.out.print(arr[i] + " "); } }
Python3
# Python3 program to split array and # move first part to end. # Function to split array and # move first part to end def SplitAndAdd(A, length, rotation): # make a temporary array with double # the size and each index is initialized to 0 tmp = [ 0 for i in range(length * 2)] # copy array element in to new array twice for i in range(length): tmp[i] = A[i] tmp[i + length] = A[i] for i in range(rotation, rotation + length, 1): A[i - rotation] = tmp[i]; # Driver code arr = [12, 10, 5, 6, 52, 36] n = len(arr) position = 2 SplitAndAdd(arr, n, position); for i in range(n): print(arr[i], end = " ") print() # This code is contributed by SOUMYA SEN
C#
// C# program to split array // and move first part to end. using System; class GFG { // Function to split array and // move first part to end public static void SplitAndAdd(int[] A, int length, int rotation) { // make a temporary array with double the size int[] tmp = new int[length * 2]; // copy array element in to new array twice Array.Copy(A, 0, tmp, 0, length); Array.Copy(A, 0, tmp, length, length); for (int i = rotation; i < rotation + length; i++) { A[i - rotation] = tmp[i]; } } // Driver code public static void Main(string[] args) { int[] arr = new int[] {12, 10, 5, 6, 52, 36}; int n = arr.Length; int position = 2; SplitAndAdd(arr, n, position); for (int i = 0; i < n; ++i) { Console.Write(arr[i] + " "); } } } // This code is contributed by kumar65
Javascript
<script> // Javascript program to split // array and move first // part to end. // Function to split array and // move first part to end function SplitAndAdd(A,Length,rotation) { // make a temporary array // with double the size let tmp = new Array(Length*2); for(let i=0;i<tmp.length;i++) { tmp[i]=0; } // copy array element in to new array twice for(let i=0;i<Length;i++) { tmp[i] = A[i] tmp[i + Length] = A[i] } for(let i=rotation;i<rotation+Length;i++) { A[i - rotation] = tmp[i]; } } // Driver code let arr=[12, 10, 5, 6, 52, 36]; let n = arr.length; let position = 2; SplitAndAdd(arr, n, position); for (let i = 0; i < n; ++i) document.write(arr[i] + " "); // This code is contributed by avanitrachhadiya2155 </script>
5 6 52 36 12 10
Complejidad temporal: O(n)
Complejidad espacial: O(2n)
Una solución O(n) eficiente se analiza en la siguiente publicación: Divida la array y agregue la primera parte al final | Conjunto 2
Se observa este problema, pero el problema de rotación de array y podemos aplicar los métodos optimizados de rotación de array O (n) aquí.
Programa para rotación de
arreglos Algoritmo de intercambio de bloques para rotación de arreglos
Algoritmo de inversión para rotación de arreglos
Encuentre rápidamente múltiples rotaciones a la izquierda de un arreglo | Conjunto 1
Imprime la rotación a la izquierda de la array en el tiempo O (n) y el espacio O (1)
Este artículo es una contribución de Aditya Ranjan . 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