设将n(n>1)个整数存放到一维数组R中,试设计一个时间和空间两方面尽可能高效的算法,将R中整数序列循环左移p(p>0)个位置,即将R中的整数序列(X0, X1, ..., Xn)变换为(Xp, Xp+1, ..., Xn-1, X0,X1, ..., Xp-1)
要求:
1.给出算法基本设计思想
2.语言实现
3.写出时间和空间复杂度
void reverse(int R[], int l, int r)
{
int tmp;
while (l < r)
{
tmp = R[l];
R[l] = R[r];
R[r] = tmp;
l ++;
r --;
}
}
void move2(int R[], int n, int p)
{
if (p && p > 0)
{
reverse(R, 0, n-1);
reverse(R, 0, p-1);
reverse(R, p, n-1);
}
}
时间复杂度O(n) 空间复杂度O(1)
ps:多锻炼算法可以让自己设计算法的时候更加考虑高效和省空间的算法。