[LeetCode] Rotate Array
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?
Could you do it in-place with O(1) extra space?
Credits:
Special thanks to @Freezen for adding this problem and creating all test cases.
反转字符串,使用三步反转法,详见:[Algorithm] Reverse String
class Solution { public: void rotate(vector<int>& nums, int k) { if (nums.empty()) return; int n = nums.size(); while (k > n) { k %= n; } rotateCore(nums, 0, n - 1); rotateCore(nums, 0, k - 1); rotateCore(nums, k, n - 1); } void rotateCore(vector<int>& nums, int left, int right) { while (left < right) swap(nums[left++], nums[right--]); } }; // 19 ms