📌  相关文章
📜  拆分数组并将第一部分添加到末尾

📅  最后修改于: 2022-05-13 01:57:52.409000             🧑  作者: Mango

拆分数组并将第一部分添加到末尾

有一个给定的数组并将其从指定位置拆分,并将数组的第一部分添加到末尾。

拆分数组并将第一部分添加到末尾

例子:

Input : arr[] = {12, 10, 5, 6, 52, 36}
            k = 2
Output : arr[] = {5, 6, 52, 36, 12, 10}
Explanation : Split from index 2 and first 
part {12, 10} add to the end .

Input : arr[] = {3, 1, 2}
           k = 1
Output : arr[] = {1, 2, 3}
Explanation : Split from index 1 and first
part add to the end.

简单的解决方案
我们一一旋转数组。

C
// CPP program to split array and move first
// part to end.
#include 
 
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, 6, 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 
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, 6, 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, 6, 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, 6, position);
 
        for (int i = 0; i < n; ++i)
            Console.Write(arr[i] + " ");
    }
}
 
// This code is contributed by Shrikant13.


PHP


Javascript


C++
// CPP program to split array and move first
// part to end.
#include 
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


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


输出:

5 6 52 36 12 10

上述解决方案的时间复杂度为 O(nk)。
另一种方法:另一种方法是制作一个大小为两倍的临时数组,并将我们的数组元素复制到一个新数组中两次。然后将新数组中的元素复制到我们的数组中,将旋转作为起始索引,直到长度为我们的数组。
下面是上述方法的实现。

C++

// CPP program to split array and move first
// part to end.
#include 
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

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


输出:

5 6 52 36 12 10