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]
.
class Solution {
public:
void rotate(vector<int>& nums, int k) {
int n = nums.size();
k = k > n ? k % n : k;
reverse(nums, 0, n - k - 1);
reverse(nums, n - k, n - 1);
reverse(nums, 0, n - 1);
}
void reverse(vector<int>& nums, int first, int last) {
for (int i = first, j = last; i < j; ++i, --j) {
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
}
};