描述
对于一个数组,右移k位
解决
k可能大于数组长度,所以要对k求余,《编程珠玑》上的问题,先对整体旋转一次,然后再根据k分别旋转两个小的部分
class Solution {
public:
void rotate(vector<int>& nums, int k) {
int length = nums.size();
k %= length;
int l = 0, r = length - 1;
while (l < r)
{
swap(nums[l++], nums[r--]);
}
l = 0;
r = k - 1;
while (l < r)
{
swap(nums[l++], nums[r--]);
}
l = k;
r = length - 1;
while (l < r)
{
swap(nums[l++], nums[r--]);
}
}
void swap(int &a, int &b)
{
a ^= b;
b ^= a;
a ^= b;
}
};