C语言——每日一题(轮转数组)

一.前言

前不久学习了时间复杂度的概念,便在力扣上刷了一道需要参考时间复杂度的题------轮转数组

https://leetcode.cn/problems/rotate-array/submissions这道题不能使用暴力算法,因为这道题对时间复杂度的要求不能为O(N^2)。因此我们只能使用其他,简便的方法过关。

二.正文

1.1题目描述

1.2暴力算法(思想对,但是不能通过该题)

看到题目,你可能会想通过双重循环将数字一个个遍历到相应位置,这个思路并没有错,只是答案并不能跑过,因为这个方法的时间复杂度是O(N^2),很明显不符合题目要求。如果你想要看,以这个方法在力扣上该如何显示,请看VCR:

虽然能运行,但是不符合题目要求,因此它才显示只通过37个用例,但其实解题思想是没有问题的。

1.3分段逆置

该方法的的思想是:将一组数据,分段逆置,最后再将整个数据进行逆置。好吧,我知道这样讲确实太抽象了。

对于内部的逆转是这样的:

其他的与上面一样的逆转原理。

以下是源代码

cpp 复制代码
void spin(int *nums,int left,int right)
{
    while(right>left)
    {
        int tmp=nums[right];
         nums[right]=nums[left];
        nums[left]=tmp;
        left++;
        right--;
    }
}
void rotate(int* nums, int numsSize, int k)
{
   int n=numsSize;
   k=k%n;
   spin(nums,0,n-k-1);
   spin(nums,n-k,n-1);
   spin(nums,0,n-1);
}

三.结言

今天的题目分享就到这了,朋友们,咱们下次再见,拜拜~

相关推荐
dialect_9 小时前
KMP算法
开发语言·c++·算法
总要学点什么9 小时前
第89篇:三维特效-螺旋圆效果——让螺旋臂卷起一圈圈外扩的涟漪
开发语言·javascript·ecmascript·webgl·cesium·空间分析·1024程序员节
开开心心_Every11 小时前
快速隐藏程序工具自定义快捷键一键切换
java·开发语言·前端·spring·智能手机·word·intellij-idea
chenbingjie_c11 小时前
C++ 多态完全指南:从虚函数重写到虚函数表原理
开发语言·c++
吴卫斌11 小时前
定投ETF实战指南(四):行业/主题ETF——定投的“进攻端“
开发语言·python·股票·量化
·present·11 小时前
CSAPP(Bomb lab)
c语言·c++
超级架构师12 小时前
PRAXO-CORE 2.5.0:用 conformance 和显式边界构建 Go Agent 框架
开发语言·人工智能·后端·golang·ai编程·智能体框架·praxo-core
叼烟扛炮13 小时前
Linux 学习笔记(四十三):网络编程进阶——自定义协议解决 TCP 粘包与守护进程
linux·开发语言·网络·笔记·tcp/ip
LMT流氓兔14 小时前
第五单元——第十六课:给书店助手加上网页界面
java·开发语言·jvm·人工智能·oracle·langchain·1024程序员节
专注仿真14 小时前
梯度提升类(XFBoost)算法详解与代码实例
开发语言·人工智能·python·算法·大模型训练·控制算法