题目:旋转数组
C语言解题
方案1
void rotate(int* nums, int numsSize, int k) {
int temp;
int i, j;
for (i = 0; i < k; i++)
{
temp = nums[numsSize - 1];
for (j = numsSize - 1; j > 0; j--)
{
nums[j] = nums[j - 1];
}
nums[0] = temp;
}
}
k次循环:每一次单独保存数组最后一个的值temp,将数组前numsSize-1个元素后移,最后将数组的第一个元素赋值为temp。
方案2
void rotate(int* nums, int numsSize, int k)
{
convert(nums, 0, numsSize - k-1);
convert(nums, numsSize - k, numsSize-1);
convert(nums, 0, numsSize-1);
}
void convert(int* nums, int start, int end)
{
int temp;
for (int i = 0; i < (end-start+1)/2; i++)
{
temp = nums[start + i];
nums[start + i] = nums[end - i];
nums[end - i] = temp;
}
}
前numsSize-k个数倒置,后k个数倒置,再整体倒置。