设计分治算法,实现将数组A[n]中所有元素循环左移k个位置,要求时间复杂度为O(n),空间复杂度为O(1)。例如,对abcdefgh循环左移3位得到defghabc
整理网上代码如下。
亲测有效。
#include <iostream>
using namespace std;
void LeftReverse(char *a,int begin,int end){
for(int i=0;i<(end-begin+1)/2;i++){
int temp=a[begin+i];
a[begin+i]=a[end-i];
a[end-i]=temp;
}
}
void Converse(char *a,int n,int k){
LeftReverse(a,0,k-1);//先把abc以b为中心左右对换得到cba
LeftReverse(a,k,n-1);//对换得到hgfed
LeftReverse(a,0,n-1);//掉换cbahgfed得到defghabc
for(int i=0;i<n;i++)
cout<<a[i]<<"";
cout<<endl;
}
int main() {
char a[8]={'a','b','c','d','e','f','g','h'};
Converse(a,8,3);
return 0;
}