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.
第一种方法:拼数组
class Solution {
public:
void rotate(vector<int>& nums, int k) {
if(nums.size() < 1) return;
k = k % nums.size();
vector<int> numm(nums.begin(), nums.begin()+nums.size()-k);
vector<int> numk(nums.begin()+nums.size()-k, nums.end());
for(int i=0; i < nums.size();i++){
if(i < k){
nums[i] = numk[i];
}else{
nums[i] = numm[i-k];
}
}
}
};
第二种方法:两次翻转
class Solution {
public:
void rotate(vector<int>& nums, int k) {
if(nums.size() < 1) return;
k = k % nums.size();
int i = 0, j = nums.size()-1;
while(i < j) swap(nums[i++], nums[j--]);
i = 0; j = k-1;
while(i < j) swap(nums[i++], nums[j--]);
i = k; j = nums.size()-1;
while(i < j) swap(nums[i++], nums[j--]);
}
};
第三种方法:依次交换元素