深圳市建筑工程有限公司东莞seo优化推广
本篇博客给大家带来的是用C++语言来解答轮转数组!
🐟🐟文章专栏:每日一练
🚀🚀若有问题评论区下讨论,我会及时回答
❤❤欢迎大家点赞、收藏、分享!
今日思想:不服输的少年啊,请你再努力一下!
题目描述:
方法1: 三次逆置
思路:下图这种思路不是一般人能想出来的,大家知道就行。
代码实例:
#define _CRT_SECURE_NO_WARNINGS 1
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;//防止k>numsSize//前numsSize-k个数据逆置reverse(nums, 0, numsSize - k - 1);//第一次逆置//后k个数据逆置reverse(nums, numsSize - k, numsSize - 1);//第二次逆置//整体逆置reverse(nums, 0, numsSize - 1);
}
方法2:创建新数组
思路:先创建新数组,然后把轮转k次的数组放到临时数组中去,最后再放回去。
代码实例:
void rotate(int* nums, int numsSize, int k) {//创建新数组int newArr[numsSize];//向右轮转k次并保存在临时数组中for(int i=0;i<numsSize;i++){newArr[(i+k)%numsSize]=nums[i];}//把临时数组的值放回去for(int i=0;i<numsSize;i++){nums[i]=newArr[i];}
}
完!