题目描述
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].
Note:
Try to come up as many solutions as you can, there are at least 3 different ways to solve this problem.
[show hint]
Related problem: Reverse Words in a String II
Credits:
Special thanks to @Freezen for adding this problem and creating all test cases.
分析
和旋转字符串是一样的,先部分旋转,再整体旋转。
代码
static void reverse(int[] nums, int st, int ed) {
while (st < ed) {
int t = nums[st];
nums[st] = nums[ed];
nums[ed] = t;
st++;
ed--;
}
}
public static void rotate(int[] nums, int k) {
int length = nums.length;
k = k % length;
if (length == 1 || k == 0)
return;
reverse(nums, 0, length - k - 1);
reverse(nums, length - k, length - 1);
reverse(nums, 0, length - 1);
}