题目:轮转数组
给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。
示例1:
输入: 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]
示例2:
输入: nums = [-1,-100,3,99],k = 2
输出: [3,99,-1,-100]
解释:
向右轮转 1 步: [99,-1,-100,3]
向右轮转 2 步: [3,99,-1,-100]
解题思路1:
最终代码:
void rotate(int* nums, int numsSize, int k)
{k = k % numsSize;while(k--){int temp = nums[numsSize-1];for(int i = numsSize-1;i>0;i--){nums[i] = nums[i-1];}nums[0] = temp;}
}
解题思路2:
最终代码:
void revolve(int* nums,int left,int right)
{while(left<right){int temp = nums[left];nums[left] = nums[right];nums[right] = temp;left++;right--;}
}void rotate(int* nums, int numsSize, int k)
{k = k % numsSize;revolve(nums,0,numsSize-1-k);revolve(nums,numsSize-k,numsSize-1);revolve(nums,0,numsSize-1);
}