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; }