题目要求:
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.
Could you do it in-place with O(1) extra space?
Related problem: Reverse Words in a String II
Credits:
Special thanks to @Freezen for adding this problem and creating all test cases.
这道题要注意的是:k可能比数组的大小还大。程序如下:
1 class Solution { 2 public: 3 void permute(vector<int>& nums, int start, int end) 4 { 5 if(start > end) 6 return; 7 8 int sz = (end - start) / 2 + 1; 9 for(int i = 0; i < sz; i++) 10 { 11 int tmp = nums[start+i]; 12 nums[start+i] = nums[end-i]; 13 nums[end-i] = tmp; 14 } 15 } 16 17 void rotate(vector<int>& nums, int k) { 18 int sz = nums.size(); 19 if(sz <= k) 20 k -= sz; 21 if(k == 0) 22 return; 23 permute(nums, 0, sz - k - 1); 24 permute(nums, sz - k, sz - 1); 25 permute(nums, 0, sz - 1); 26 } 27 };