3.旋转数组
给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。
(1)暴力法
int rotate(int* nums, int numsSize, int k){
int i;
if (numsSize == 0 || k <= 0)
{
return 0;
}
int nums1[100]={0};
for(i=0; i<100; i++)
{
nums1[i] = nums[i] ;
}
for(i = 0; i<numsSize - k; i++)
{
nums[i] = nums[i+k];
}
for(i= 0; i < k; i++)
{
nums[100-k+i] = nums1[i];
}
for(i = 0; i<100; i++){
printf("nums:%d\n",nums[i]);
}
return 0;
}
(2)拆分三次循环
int rotate(int* nums, int numsSize, int k){
int i, temp;
int endLen;
if (numsSize == 0 || k <= 0)
{
return 0;
}
if(numsSize > 1)
{
for(i = 0, endLen = numsSize - k - 1; endLen > i; i++, endLen--)
{
temp = nums[i];
nums[i] = nums[endLen];
nums[endLen] = temp;
}
for(i = numsSize - k, endLen = numsSize - 1; endLen > i; i++, endLen--)
{
temp = nums[i];
nums[i] = nums[endLen];
nums[endLen] = temp;
}
for(i = 0, endLen = numsSize - 1; endLen > i; i++, endLen--)
{
temp = nums[i];
nums[i] = nums[endLen];
nums[endLen] = temp;
}
for(i = 0; i < numsSize-1; i++){
printf("%d,", nums[i]);
}
printf("%d", nums[numsSize-1]);
}
else printf("%d",nums[numsSize]);
return 0;
}