问题 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数
- 定义函数,使数组向后移一位,调用函数k次,复杂度O(kn)
void span(int arr[],int size)
{
int temp = arr[size - 1];
for(int i = size - 1;i > 0;i--)
{
arr[i] = arr[i - 1];
}
arr[0] = temp;
}
void ans(int arr[],int size,int k)
{
for(int i = 0;i < k;i++)
{
span(arr,size);
}
}
2.反转
先将数组整体反转,然后将前k个值反转,再将后n - k 个值反转,得到答案数组
void reserve(int arr[],int begin,int end)
{
for(int i = begin;i < (begin + end) / 2;i++)
{
int temp = arr[i];
arr[i] = arr[end - i + begin];
arr[end - i + begin] = temp;
}
}
void ans(int arr[],int size,int k)
{
reserve(arr,0,size - 1);
reserve(arr,0,k - 1);
reserve(arr,k,size - 1);
}