题目:
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.
Hint:
Could you do it in-place with O(1) extra space?
Could you do it in-place with O(1) extra space?
题解:
看似很简单的题,不过通过率却不到20%。
k=k%n;//处理k,很重要的一步。
要求O(1)额外空间。
解一:
//把后k个数复制出来,先调整原数组前面的nums.length-k个数。需要O(k)额外空间
public class Solution {
public void rotate(int[] nums, int k) {
int len = nums.length;
k = k%len;
int[] tmp = new int[k];
for(int i = 0; i < k; i++){
tmp[i] = nums[len-k+i];
}
for(int i = len-1; i >= k; i--){
nums[i] = nums[i-k];
}
for(int i = 0; i < k; i++){
nums[i] = tmp[i];
}
}
}