一、问题描述
Rotate an array of n elements to the right by k steps.
For example, with n = 7 and k = 3, the array [1,2,3,4,5,6,7]
is rotated to [5,6,7,1,2,3,4]
.
二、问题分析
题目有好几种解决方案。如果没有空间要求,可以另开一个数组,然后复制一下就可以。当然我们可以充分利用原数组的特点,采用三次翻转操作即可。
三、Java AC代码
public void rotate(int[] nums, int k) {
if (nums==null || nums.length<2) {
return ;
}
k = k % nums.length;
reverse(nums, 0, nums.length-1);
reverse(nums, 0, k-1);
reverse(nums, k, nums.length-1);
}
private void reverse(int[] nums, int start, int end) {
int tmp = 0;
int i = start, j = end;
while(i<j) {
tmp = nums[i];
nums[i] = nums[j];
nums[j] = tmp;
i++;
j--;
}
}