拆分数组并将第一部分添加到末尾
有一个给定的数组并将其从指定位置拆分,并将数组的第一部分添加到末尾。
例子:
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