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]
.
题意:给出一个数组,让其右移k 位,求新的数组
思路:先将[0,len-1]翻转,再[0,k-1]之间翻转,[k,len-1]之间翻转
代码如下
public class Solution
{
public void rotate(int[] nums, int k)
{
int len = nums.length;
int i = 0, j = len - 1;
while (i < j)
{
int tmp = nums[i];
nums[i] = nums[j];
nums[j] = tmp;
i++;
j--;
}
if (k > len) k -= len;
i = 0;
j = k - 1;
while (i < j)
{
int tmp = nums[i];
nums[i] = nums[j];
nums[j] = tmp;
i++;
j--;
}
i = k;
j = len - 1;
while (i < j)
{
int tmp = nums[i];
nums[i] = nums[j];
nums[j] = tmp;
i++;
j--;
}
}
}