关于旋转数组的理解和做法

实现一个数组向左或者向右轮转k个单位

使用程序是 Dev C++

以 int a[ ]={1,2,3,4,5,6};为例.

刚开始学算法的时候

我尝试用暴力的求下标的方法

直接给最复杂耗时的做法

我尝试用相加和取模的方法,结合 if 算法暴力求出每一个变换之后的坐标

与此同时,一次错误的输入让我意识到,超过总元素个数的数字,例如 7 输入的时候就会出错

这里取个模也是有点取巧。

在学习了指针之后,我也尝试用更加暴力的指针访问来解决

每一步实现取出第一个元素放到数组的末尾,只需要调整步数即可

在查阅一些资料之后,我也发现有一些比较逆天的妙计

代码如下:有些书籍美其名曰 三步翻转法

先按照反转的步数划分数组

前一部分和后一部分分

这里的reverse函数的设置也是分别从数组的两头开始一一对应翻转数组

在此基础上,可以追加1、查找数组是否为原数组翻转得到

                                    2、计算翻转所需要的次数

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值