#include<stdio.h>
#include<string.h>
#include<assert.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
#include<stdbool.h>
#include"queue.h"
void Reverse(int* nums, int left, int right)
{
while (left < right)
{
int tmp = nums[left];
nums[left] = nums[right];
nums[right] = tmp;
left++;
right--;
}
}
void rotate(int* nums, int numsSize, int k)
{
k = k % numsSize;//为了解决需要移动的位数大于数据的个数时的情况
Reverse(nums, 0, numsSize - 1);
Reverse(nums, 0, k - 1);
Reverse(nums, k, numsSize - 1);
}
void main()
{
int nums[] = { 1,1,2,3 };
int numsSize = sizeof(nums) / sizeof(nums[0]);
int k = 3;
rotate(nums, numsSize, k);
for(int i = 0;i< numsSize;i++)
{
printf("%d ", nums[i]);
}
}
遍历法可能会超出时间限制, 所以将数组分成两部分进行反转。