旋转数组
给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。
示例 1:
输入:[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]
示例 2:
输入:
[-1,-100,3,99]
和 k = 2
输出: [3,99,-1,-100]
解释:
向右旋转 1 步: [99,-1,-100,3]
向右旋转 2 步: [3,99,-1,-100]
解题思路:
- 后移几步则循环几次
- 先把数组中的最后一位记下
- 循环一遍,然后把数组中的每一位后移一位
- 把之前记下的最后一位赋给空出来的第一位
- 这个代码测试例子中有一个数组长度是两万多的例子,用Java写会时,所以用C语言写会好一点。
代码如下:
void rotate(int* nums, int numsSize, int k) {
int i=0;
int j=0;
for(i=0;i<k;i++) { //旋转几步就循环几次
int e=nums[numsSize-1]; //先将数组最后一位记下
for(j=numsSize-1;j>0;j--) { 将数组中,从第0位开始每一位后移一位。
nums[j]=nums[j-1];
}
nums[0]=e;然后把之前记下的最后与一位赋给第0位.
}
}