顺序表的循环右(左)移

本文探讨了顺序表的循环右(左)移问题,包括在一维数组中两个子序列的互换以及数组循环左移的算法。文章提到了两种常见方法:使用辅助数组和原地操作,并指出了一种时间复杂度为O(m+n)、空间复杂度为O(1)的逆置算法,是解决这类问题的最佳实践。
摘要由CSDN通过智能技术生成

顺序表的循环右(左)移

我们经常能在算法题中看到如下题:

一:在一维数组中A[m+n],依次存放(a1, a2, …, an)和(b1, b2, …, bn),写个函数把它俩位置互换为(b1, b2, …, bn),(a1, a2, …, an)

二:将n (n > 1) 个整数存放到一维数组R中,将R中保存的序列循环左移p (0 < p < n) 个位置(2010年考研真题)

这两个题目其实本质上是相同的,都是对整个数组的循环左移或右移。
注:数组和顺序表的概念类似但是不相同,数组是逻辑结构,顺序表是线性表采用顺序存储方式实现的,而顺序存储方式是物理存储方式,所以二者不能混淆,即顺序表指的是连续存放在内存中的线性表,数组是内存中一串连续内存的名字。

其实我们平常思考很自然会有两种算法:
一:时间复杂度为O(n),空间复杂度为O(n)
       即采取一个辅助数组,将原数组中前p个存入数组后p个位置中,然后将原数组中的后n-p个元素存入前n-p个位置中,这样实现了左移或右移,当然,也可以选择保存前p个元素,将原数组中后n-p个元素前移,最后将前p个元素保存回原数组的后p个位置中。时间复杂度和空间复杂度相同
二&#

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值