题目描述:设计一个算法,把一个含有N个元素的数组循环右移K位,要求算法的时间复杂度位
什么意思呢,就是说如果输入序列为:abcd1234,右移2位即变为34abcd12。唯一的要求就是使用两个附加变量。 
其实这道题编程珠玑上面也出现过,书中给出的一种符合题意的解法是巧妙地进行翻转。以把abcd1234右移4位为例:
如果是代码实现,那也是很简单的了。我的一个实现如下:
#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;
}
参考书籍:编程之美,编程书籍
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文:http://blog.csdn.net/u013220338/article/details/47656735