问题
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(int nums[], int n, int k) {
if (n < k) {
k = k - n;
}
reserve (nums , n - k);
reserve (nums + n - k, k);
reserve (nums, n);
}
private:
void reserve (int *nums , int n) {
if (n <= 0)
return;
for (size_t i = 0; i < n / 2; ++i) {
swap (nums[i], nums[n - i - 1]);
}
}
inline void swap (int &a, int &b) {
a = a ^ b;
b = a ^ b;
a = a ^ b;
}
};