【C语言】每日一题(旋转数组)

旋转数组,链接奉上

目录

方法:

创建额外的数组:

整体思路:

创建一个额外的数组 ,将原数组中的数字根据k(即要向右轮转的个数)放到新的数组中,最后将新的数组赋值给原数组

细节:

在放置在数组时,分为两种情况:
例如:

c 复制代码
1 2 3 4 5 6 7 原数组
6 7 1 2 3 4 5 轮转后的数组

我们发现:

原数组中的1 在新的数组中在第三位 ,2 在第四位 ...

而6 在第一位 ...

这就说明我们在放置时需要注意不通情况下放置的方法不同

代码实现:

c 复制代码
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[i+k] = nums[i];
        }
        else
        {
            arr[j++] = nums[i];
        }
    }
    //赋值到原数组
    for(int i = 0; i < numsSize; i++)
    {
        nums[i] = arr[i];
    }
}

数组反转:

整体思路:

:
1.先整体翻转

复制代码
2.根据k将前半部分再次翻转   

3.将剩下的数组再反转

例如:假设我们有如下数组,我们轮转2个

c 复制代码
1 2 3 4 5 6 原数组
6 5 4 3 2 1 整体翻转的数组
5 6 1 2 3 4 将6与5翻转,4到1翻转后的结果即为轮转2个的结果

细节:

当我们传参时,知道数组的首尾,就可以将首尾之间的元素进行翻转,

另外,传参时要注意首尾的大小,防止越界等现象发生

代码实现:

c 复制代码
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);
}

小插曲:

当时实现代码时,我考虑到nums+k-1会出现负数的情况,但是我打算先将整体逻辑敲出来,敲出来之后就直接提交了,没想到的是居然能过,这就让我困惑起来

后来我举例代入,发现当nums+k-1小于0时,while循环不会进入,=0时也不会进入,无意识敲得代码居然有如此严密的逻辑性(震惊)

欢迎讨论

相关推荐
阿里嘎多学长1 小时前
2026-10-20 GitHub 热点项目精选
开发语言·程序员·github·代码托管
布吉岛的石头2 小时前
Java 程序员第 50 阶段2:预训练的目标函数:自回归语言建模本质
java·开发语言·人工智能·深度学习·回归·transformer
小羊没烦恼!2 小时前
铁道部新客票系统设计(二)
开发语言·前端·数据库·python·oracle·c#·php
quantdash_cc3 小时前
从实时行情到价格观察表:用 Python 和 Pandas 构建策略输入数据
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
昂好的day4 小时前
VisionMaster 通信模块实战(上):Modbus、TCP 收发、协议组装解析
开发语言·网络·网络协议·tcp/ip·c#
努力实干5 小时前
面向对象设计原则——C++
开发语言·c++·数码相机
NetX行者6 小时前
四语言 Hello World 背后:编译模型与运行时对比
开发语言
Pin_Qing7 小时前
账单没超,请求先被拒了
大数据·开发语言·人工智能
2601_962885727 小时前
如何用 Python 计算 VaR 和 CVaR(在险价值)?
开发语言·python
郝亚军7 小时前
manifest 中 `sha256` 与 `signValue` 的作用
java·开发语言·数据结构