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.
Related problem: Reverse Words in a String II
Credits:
Special thanks to @Freezen for adding this problem and creating all test cases.
Subscribe to see which companies asked this question.
Solution:
Tips:
reverse whole array, then partially reverse every part. K needs to be specially tackled, if k greater than the length of array. k %= array.length.
Java Code:
public class Solution {
public void rotate(int[] nums, int k) {
if (k == 0) {
return;
}
k %= nums.length;
int left = 0;
int right = nums.length - 1;
// reverse for whole array
for (; left < right; left++) {
int t = nums[left];
nums[left] = nums[right];
nums[right] = t;
right --;
}
// partial reverse for the previous part
left = 0;
right = k - 1;
for (; left < right; left++) {
int t = nums[left];
nums[left] = nums[right];
nums[right] = t;
right --;
}
// partial reverse for the next part
left = k;
right = nums.length - 1;
for (; left < right; left++) {
int t = nums[left];
nums[left] = nums[right];
nums[right] = t;
right --;
}
}
}