当前位置: 首页 > news >正文

将顺序表中的元素循环左移p个位置

将n(n>1)个整数存放在一维数组R中。设计一个在时间和空间上尽可能高效的算法,将R中保持的序列循环左移p个位置。即将R中的数据由{X0,X1,X2.........Xn-1}变换位{XP,XP+1,.....Xn-1,X0,X1,....XP-1}。

暴力思想:申请一个辅助数组,将0到p-1个元素存在这个数组中,然后将剩下元素移动到R数组的前面,最后把辅助数组中的元素放到R数组的后面。

代码:

void converse(SqList &R,int p){int *temp=(int*)malloc(sizeof(int)*p);//申请辅助数组 for(int i=0;i<p;i++){//将前面p个元素存在辅助数组中 temp[i]=R.data[i];}for(int i=p;i<R.length;i++){//将p到n-1位置的元素移动到R表前面 R.[i-p]=R.[i];}for(int i=0;i<p;i++){//将temp中的元素移动到n-p到n-1的位置上 R.[length-p+i]=temp[i];}free(temp);
}

时间复杂度O(n);空间复杂度O(p)(取决于移动的个数)

最优解法思想:将前面p个元素看成是表A,将剩余元素看成表B。整体可看成将数组AB,转换为BA。先整个表进行逆转,然后对前面的子表进行逆转,最后对后面一个子表进行逆转。(例如:可以将两个子表看成12345abcde,对整个表进行逆转后为edbca54321,再对前面进行逆转为abcde54321,最后对后面进行逆转为abcde12345)

代码:

void swap(ElemType &a,ElemType &b){int temp;temp=a;a=b;b=temp
}void reverse(Sqlist &L,int s,int e){if(e>L.length) return;//反转顺序表的范围为s到ewhile(s<e){//对称位置做交换 swap(L.data[s],L.data[e]);s++;e--;}
} 
bool converse(Sqlist &L,int p,int n){reverse(L,0,n-1);//逆转整个表 reverse1(L,0,p-1);//逆转前s个元素 reverse1(L,p,n-1);//逆转后n-s个元素 return true;}

时间复杂度O(n);空间复杂度O(1)

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 数学建模之入门篇
  • 《机器学习》数据分析之关键词提取、TF-IDF、项目实现 <下>
  • 如何永久解决 Memory overcommit must be enabled! 警告问题
  • c++单例模式(Singleton)多种实现方式及最优比较
  • 打手机检测算法源码样本展示打手机检测算法实际应用场景介绍
  • sort排序免忘记
  • 云轴科技ZStack产品升级,浙江分公司产品发布会成功举办
  • chrome cookie编辑
  • 如何选择适合海外直播的网络?
  • 万亿生成式AI市场,商汤迎来“长坡厚雪”
  • 【React原理 - 任务调度和时间分片详解】
  • Maui的xaml中的换行符
  • Linux--IO模型_多路转接
  • k8s的组件以及安装
  • 【Linux】 理解 Linux 中的 `dup2` 函数
  • Angular 响应式表单 基础例子
  • angular组件开发
  • Docker容器管理
  • maven工程打包jar以及java jar命令的classpath使用
  • Zsh 开发指南(第十四篇 文件读写)
  • 仿天猫超市收藏抛物线动画工具库
  • 记一次用 NodeJs 实现模拟登录的思路
  • 如何设计一个比特币钱包服务
  • 扩展资源服务器解决oauth2 性能瓶颈
  • 通过调用文摘列表API获取文摘
  • 新年再起“裁员潮”,“钢铁侠”马斯克要一举裁掉SpaceX 600余名员工 ...
  • ​​​​​​​GitLab 之 GitLab-Runner 安装,配置与问题汇总
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • ######## golang各章节终篇索引 ########
  • #define、const、typedef的差别
  • #laravel部署安装报错loadFactoriesFrom是undefined method #
  • #pragma multi_compile #pragma shader_feature
  • $.proxy和$.extend
  • (PySpark)RDD实验实战——取最大数出现的次数
  • (二)JAVA使用POI操作excel
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • (原)记一次CentOS7 磁盘空间大小异常的解决过程
  • ./和../以及/和~之间的区别
  • .bat文件调用java类的main方法
  • .MSSQLSERVER 导入导出 命令集--堪称经典,值得借鉴!
  • .NET Core 将实体类转换为 SQL(ORM 映射)
  • .NET 反射的使用
  • .net 提取注释生成API文档 帮助文档
  • .net分布式压力测试工具(Beetle.DT)
  • [ vulhub漏洞复现篇 ] Hadoop-yarn-RPC 未授权访问漏洞复现
  • [000-002-01].数据库调优相关学习
  • [240607] Jina AI 发布多模态嵌入模型 | PHP 曝新漏洞 | TypeScript 5.5 RC 发布公告
  • [Android 13]Input系列--获取触摸窗口
  • [Android] Implementation vs API dependency
  • [Angularjs]asp.net mvc+angularjs+web api单页应用之CRUD操作
  • [ArcPy百科]第三节: Geometry信息中的空间参考解析
  • [C#]C# winform部署yolov8目标检测的openvino模型
  • [C++]类和对象【下】
  • [Excel]如何找到非固定空白格數列的條件數據? 以月份報價表單為例
  • [ExtJS5学习笔记]第三十节 sencha extjs 5表格gridpanel分组汇总