本篇博客给大家带来的是用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];
}
}
完!