题目说到要用3种以上方法,又有一个要求是O(1)空间复杂度,有一种要用原地算法了,稍微复杂一点
这里第一个是构造辅助数组
void rotate(int* nums, int numsSize, int k) {
k = k % numsSize;
if(!k)
return;
int temp[numsSize];
int index = 0;
for(int i=numsSize-k;i<numsSize;i++)
temp[index++] = nums[i];
for(int i=0;i<numsSize-k;i++)
temp[index++] = nums[i];
for(int i=0;i<numsSize;i++)
nums[i] = temp[i];
}
第二个就是模拟每一次的旋转
void rotate(int* nums, int numsSize, int k) {
k = k % numsSize;
if(!k)
return;
while(k--){
int t = nums[numsSize-1];
for(int i=numsSize-1;i>=1;i--){
nums[i] = nums[i-1];
}
nums[0] = t;
}
}
第三个就是像翻转字符串一样,先对前面k个翻转再翻转后面对部分,再翻转整个数组,这个太麻烦了,就不写了。。。