1.题目:
将n个整数存放到一维数组R中。试设计一个在时间和空间都尽可能高效的算法。将R中保存的序列循环左移P个位置,即将R中数据由[X0,X1, …,Xn-1]变换为[Xp,Xp+1,…,Xn-1,X0,X1,…,Xp-1]。
2.代码:
/*
思路:即[a,b]=>[b,a],a为前p个元素,左移之后到右边。
[a,b] =>[a^-1,b] =>[a^-1,b^-1] =>[a^-1,b^-1]^-1 =>[b,a]
*/
//[from,to]置换
void revrese(int R[],int from,int to){
int i,temp;
for(int i=0;i<(to-from-1)/2;i++)
temp=R[from+i];
R[from+i]=R[to-i];
R[to-i]=temp;
}
void converse(int R[],int n,int p){
reverse(R,0,p-1);
reverse(R,p,n-1);
reverse(R,0,n-1);
}
3.知识点:
NULL