刷爆LeetCode之旋转数组

旋转数组

给定一个数组,将数组中的元素向右移动 个位置,其中 是非负数。

示例 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位.
	
		}
}

猜你喜欢

转载自blog.csdn.net/weixin_42233291/article/details/82817102