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.
思路:一维向量反转问题,向右反转其实也就是向左反转,具体思路可以借鉴一维向量反转,需要注意的是这里的k需要对n取模。代码如下:
class Solution {
public:
void reverse(vector<int> &nums, int start, int end){
int i = start, j = end;
while(i < j){
swap(nums[i], nums[j]);
i++;
j--;
}
}
void rotate(vector<int>& nums, int k) {
int size = nums.size();
int r = size - k%size;
reverse(nums,0, r - 1);
reverse(nums, r, size - 1);
reverse(nums, 0, size - 1);
}
};