怎么样建设一个网上教学网站,郑州网站建设系统介绍,浙江平湖建设局网站,服装网站建设课程旋转数组#xff0c;链接奉上 目录 方法:创建额外的数组#xff1a;整体思路#xff1a;代码实现#xff1a; 数组反转#xff1a;整体思路#xff1a;代码实现#xff1a;小插曲#xff1a; 方法:
创建额外的数组#xff1a;
整体思路#xff1a; 创建一个额外的…旋转数组链接奉上 目录 方法:创建额外的数组整体思路代码实现 数组反转整体思路代码实现小插曲 方法:
创建额外的数组
整体思路 创建一个额外的数组将原数组中的数字根据k即要向右轮转的个数放到新的数组中最后将新的数组赋值给原数组 细节
在放置在数组时分为两种情况 例如
1 2 3 4 5 6 7 原数组
6 7 1 2 3 4 5 轮转后的数组我们发现
原数组中的1在新的数组中在第三位2在第四位… 而6在第一位… 这就说明我们在放置时需要注意不通情况下放置的方法不同
代码实现
void rotate(int* nums, int numsSize, int k)
{k k % numsSize;int arr[numsSize];int j 0;for(int i 0; i numsSize; i){//判断两种情况if(i k numsSize - 1){arr[ik] nums[i];}else{arr[j] nums[i];}}//赋值到原数组for(int i 0; i numsSize; i){nums[i] arr[i];}
}数组反转
整体思路 将字符串 反转3次 1.先整体翻转 2.根据k将前半部分再次翻转 3.将剩下的数组再反转 例如假设我们有如下数组我们轮转2个
1 2 3 4 5 6 原数组
6 5 4 3 2 1 整体翻转的数组
5 6 1 2 3 4 将6与5翻转4到1翻转后的结果即为轮转2个的结果细节 当我们传参时知道数组的首尾就可以将首尾之间的元素进行翻转 另外传参时要注意首尾的大小防止越界等现象发生
代码实现
void reverse(int* start,int* end)
{while(end start){int tmp *start;*start *end;*end tmp;end--;start;}
}void rotate(int* nums, int numsSize, int k)
{k k % numsSize;reverse(nums, nums numsSize - 1);reverse(nums, nums k -1);reverse(nums k, nums numsSize - 1);
}小插曲
当时实现代码时我考虑到numsk-1会出现负数的情况但是我打算先将整体逻辑敲出来敲出来之后就直接提交了没想到的是居然能过这就让我困惑起来 后来我举例代入发现当numsk-1小于0时while循环不会进入0时也不会进入无意识敲得代码居然有如此严密的逻辑性震惊
欢迎讨论