void Reverse(int* nums, int left, int right)
{
int tmp = 0;
while(left < right)
{
tmp = nums[left];
nums[left] = nums[right];
nums[right] = tmp;
left++;
right--;
}
}
void rotate(int* nums, int numsSize, int k){
if(k >= numsSize)
{
k %= numsSize;
}
Reverse(nums, 0, numsSize-1-k);
Reverse(nums, numsSize-k, numsSize-1);
Reverse(nums, 0, numsSize-1);
}
这边的旋转解释
bef:A,B,C,D,E,F
K = 3;
WANT:D,E,F,A,B,C
我们想要让DEF到前面,那么我们可以逆置,但逆置了,却又返了,所以只要再逆置一下就正了。
还有一种特殊的情况,旋转的次数大于等于数组长度时,要取模。