QUESTION
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.
THOUGHT
这个方法是july在他的书中提到的方法,先把前k-n个元素旋转,再把最后k元素旋转,最后旋转整个数组,即可得到最后的结果。
CODE
public class Solution {
public void rotate(int[] nums, int k) {
int n = nums.length;
k = k % n;
reverse(nums,0,n - k -1);
reverse(nums,n - k,n -1);
reverse(nums,0,n - 1);
}
public void reverse(int[] arr,int start,int end){
int temp = 0;
while(start < end){
temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
start++;
end--;
}
}
}
result
time complexity is max(O(n-k),O(K)),space complexity is O(1);