旋转数组
给你一个数组,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。
输入: nums = [1,2,3,4,5,6,7], k = 3
输出: [5,6,7,1,2,3,4]
解释:
向右轮转 1 步: [7,1,2,3,4,5,6]
向右轮转 2 步: [6,7,1,2,3,4,5]
向右轮转 3 步: [5,6,7,1,2,3,4]
解法如下:
void rotate(int* nums, int numsSize, int k){
int i,lenth;
int temp[numsSize];
lenth=numsSize;
for(i=0;i<numsSize;i++) //temp数组初始化同时复制了num数组
{
temp[i]=nums[i];
}
for(i=0;i<lenth;i++)
{
nums[(k+i)%lenth]=temp[i]; //遍历数组,将移动下标后的数组一一赋值
}
}
数组的反转中,用到了(i + k) % length
来计算重新赋值的元素下标,这个用法挺特殊的,记下来~。加油。