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

互换顺序表中的两个子表位置

题型一:假设一个表长为n的顺序表L中有两个分别为长度s子表S和长度为r子表R,S,R不相交。设计算法,实现S和R在L中的位置互换,并且互换后S和R的元素均为正序排列。

思想:先整个表进行逆转,然后对前面的子表进行逆转,最后对后面一个子表进行逆转。(例如:可以将两个子表看成12345abcde,对前面进行逆转后为edbca54321,再对后面进行逆转为abcde54321,最后对整进行逆转为abcde12345)

代码:

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 exchage(Sqlist &L,int s,int n){//if(L.length != n){//	return false;//}reverse(L,0,n-1);//逆转整个表 reverse1(L,0,s-1);//逆转前s个元素 reverse1(L,s,n-1);//逆转后n-s个元素 return true;}
void swap(ElemType &a,ElemType &b){int temp;temp=a;a=b;b=temp
}

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

题型二:假设一个表长为n的顺序表L中有两个分别为长度s子表S和长度为r子表R,S,R不相交。设计算法,实现S和R在L中的位置互换,并且互换后S和R的元素均为逆序排列。

思想:将两个子表看成一个表,对表中的元素进行交换。首先是1与n交换,然后对2和n-1进行交换,以此类推,直到不能交换为止。

void reverse(Sqlist &L){int i=0;j=L.length-1;//开始时,i为顺序表的第一个元素 ,j为顺序表的最后一个元素 while(i<j){ElemType t = L.data[i];L.data[i] = L.data[j];L.data[j] = t;i++;j--;}} 

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


http://www.mrgr.cn/news/10871.html

相关文章:

  • 【开发笔记】Notepad++配置
  • 数据仓库建模的步骤-从需求分析到模型优化的全面指南
  • 【大数据】-- 插入或覆写动态分区数据(MaxCompute/Hive)
  • 华为OD机试-转盘寿司(C++ Java Python)
  • cloud compare 学习利用CC代码加快插件开发与总结(三)
  • 【机器学习工具库-一-传统机器学习sklearn库】
  • redis--主从复制,哨兵模式,Redis Cluster模式
  • MySQL 中的 distinct 和 group by 哪个效率更高
  • Android - lock/unlock bootloader
  • pikachu靶场XSS通关攻略
  • accelerate相关笔记
  • 基于Material Design风格开源的Avalonia UI控件库
  • ERROR: failed to create cluster: failed to list nodes
  • NVIDIA Jetson AGX Orin源码编译安装CV-CUDA
  • 关于Linux sudo授权的那点事
  • 《C++魔法:运算符重载的奇妙之旅》
  • Autosar(Davinci) --- ADT和IDT如何Mapping
  • Andrid异步更新UI:Handler(二)深入了解:Message你真的会创建?它是如何子线程和主线程通知?
  • [Mdfs] lc690. 员工的重要性(dfs+bfs+离线询问+问题拓展+基础题)
  • 支持pyro 1.8以上的贝叶斯神经网络实现 bnn Bayesian Neural Network pyro ,人工智能