循环移动问题思考!
来源:互联网 发布:curl 上传二进制数据 编辑:程序博客网 时间:2024/04/30 14:38
考虑一个问题:将一个具有n个元素的数组向左循环移动i个位置。有许多应用程序会调用这个问题的算法, 例如在文本编辑器中移动行的操作,磁盘整理时交换两个不同大小的相邻内存块等。所以,这个问题的算法要求有较高的时间和空间性能。
可以通过下面的方法解决这个问题:先将数组中的前i个元素存放在一个临时数组中,再将余下的n-i个元素左移i个位置, 最后将前i个元素从临时数组复制回原数组中后面的位置。但是这个算法使用了i个额外的存储单元,使得空间性能降低。
还有一个方法可以解决这个问题:先设计一个函数将数组向左循环移动一个位置,然后再调用该算法i次, 显然,这个算法的时间性能不好。
要在有限的资源中解决这个问题,似乎很困难。现在我们换一个角度看这个问题: 将这个问题看作是把数组ab转换成数组ba(a代表数组的前i个元素,b代表数组中余下的n-i个元素), 先将a逆置得到arb,再将b逆置得到arbr,最后将整个arbr逆置得到(arbr)r=ba。设Reverse函数执行将数组元素逆置的操作, 对abcdefgh向左循环移动3个位置的过程如下:
Reverse(0, i-1); //得到cbadefgh
Reverse(i, n-1); //得到cbahgfed
Reverse(0, n-1); //得到defghabc
- 循环移动问题思考!
- 关于移动测量姿态问题的思考
- 一个将数字循环移动的问题
- 循环移动
- 循环移动
- 循环移动
- 循环移动
- 循环移动
- 循环移动
- LintCode-关于一次遍历解决循环单词问题的思考
- 移动端消息推送原理浅析及问题思考
- 数组移动 数组元素循环右移问题
- 思考方式--PDCA循环
- 移动支付的思考
- 1008. 数组元素循环右移问题 (20)——数组循环移动算法
- 问题思考
- 循环移动的图片
- 循环移动的图片
- Android的文件存储和访问
- 预编译头的使用
- 一个小白问题,关于程序的CPU占用问题
- 一个虚拟机不能装载问题的解决
- 优秀驾驶员开车技巧
- 循环移动问题思考!
- 开源ETL工具kettle系列之常见问题
- 一个小问题的致命后果
- datatable 数据按照字段排序
- inline 函数的用处
- 国家对五险一金的交纳说明
- linux下主要文件
- 如何阅读 SQL Server 2005 安装日志文件
- 【总结】oracle恢复误删除数据,解除锁定的等sql语句