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.
Have two methods there, nothing special
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
void rotate(vector<int>& nums, int k) {
k = k % nums.size(); // this is the only place needs attention.
reverse(nums.begin(), nums.end());
reverse(nums.begin(), nums.begin() + k); // in-place
reverse(nums.begin() + k, nums.end());
}
void rotateII(vector<int>& nums, int k) {
int size = nums.size();
for(int i = 0; i < size - k; ++i) {
nums.push_back(nums[i]);
}
vector<int> newnums(nums.begin() + size - k, nums.end());
nums = newnums;
}
int main(void) {
vector<int> nums;
nums.push_back(1);
nums.push_back(2);
nums.push_back(3);
nums.push_back(4);
nums.push_back(5);
nums.push_back(6);
nums.push_back(7);
rotateII(nums, 3);
for(int i = 0; i < nums.size(); ++i) {
cout << nums[i] << endl;
}
cout << endl;
}