编程之美2.17之数组循环移位
来源:互联网 发布:误删数据库怎么恢复 编辑:程序博客网 时间:2024/06/05 06:15
题目描述:设计一个算法,把一个含有N个元素的数组循环右移K位,要求算法的时间复杂度位
什么意思呢,就是说如果输入序列为:abcd1234,右移2位即变为34abcd12。唯一的要求就是使用两个附加变量。
其实这道题编程珠玑上面也出现过,书中给出的一种符合题意的解法是巧妙地进行翻转。以把abcd1234右移4位为例:
第一步:翻转1234,abcd1234———->abcd4321
第二步:翻转abcd,abcd4321———->dcba4321
第三步:整体翻转,dcba4321———->1234abcd
如果是代码实现,那也是很简单的了。我的一个实现如下:
#include <iostream>#include <string>using namespace std;void reverse(string& str,int begin,int end){ for(;begin<end;begin++,end--){ char temp=str[begin]; str[begin]=str[end]; str[end]=temp; }}void rightShift(string &str,int len,int K){ K%=len; reverse(str,0,len-K-1); reverse(str,len-K,len-1); reverse(str,0,len-1);}int main(int argc,char **argv){ string str="MarkLiang19941028"; int k; cout<<"Enter K:"<<endl; cin>>k; cout<<"Before Reverse:\n"<<str<<endl; rightShift(str,str.size(),k); cout<<"After Reverse:\n"<<str<<endl; return 0;}
参考书籍:编程之美,编程书籍
0 0
- 编程之美2.17 数组循环移位
- 编程之美2.17 数组循环移位
- [编程之美2.17]数组循环移位
- 编程之美2.17 数组循环移位
- 编程之美 2.17 数组循环移位
- 编程之美2.17 数组循环移位
- 编程之美-2.17 数组移位循环
- 读书笔记之编程之美 - 2.17 数组循环移位
- 编程之美2.17之数组循环移位
- 编程之美--数组循环移位
- 数组循环移位(编程之美)
- 编程之美_012数组循环移位
- 编程之美-数组循环移位
- 编程之美 数组循环移位
- 编程之美--数组循环移位
- 编程之美--数组循环移位
- 编程之美6:数组循环移位
- 编程之美-数组循环移位
- Java基础:继承和多态
- “Software Architect” Has Only Lowercase a’s; Deal with It
- asp.net的Request.ServerVariables参数说明
- 设计模式--观察者模式
- centos 7 忘记root密码修改过程
- 编程之美2.17之数组循环移位
- Codeforces Round #316 (Div. 2)
- 随笔-Xcode6新框架的屏幕适配,屏幕上下有黑条,iphone6上不能全屏,只能在左上角显示。
- SYBASE的select into与insert into使用和区别
- jsp页面foreach循环,表单提交,批量处理数据,
- 如何让tomcat在同一个DOS窗口启动
- Java注解
- 两层查询词扩展描述的简单排序
- VS2010,C语言编程调用函数sqrt