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?
思路:通过三次翻转来实现移位
class Solution { public: void rotate(vector<int>& nums, int k) { int size = nums.size(); k %= size; if(k == size || k == 0) return; reverse(nums,0,size-1-k); reverse(nums,size-k,size-1); reverse(nums, 0, size-1); return; } void reverse(vector<int>& nums, int start, int end){ int tmp; while(start < end){ tmp = nums[start]; nums[start] = nums[end]; nums[end] = tmp; start++; end--; } } };