【考研数据结构刷题】408【2010年第 42题】
设将n(n>1)个整数存放到一维数组R中。试设计一个在时间和空间两方面都尽可能高效的算法,将R中保存的序列循环左移p(0n-1 位置进行逆置,最后可得。时间复杂度位0(n),空间复杂度为1。
·
【问题描述】
设将n(n>1)个整数存放到一维数组R中。试设计一个在时间和空间两方面都尽可能高效的算法,将R中保存的序列循环左移p(0<p<n)个位置,即将R中的数据由(x0,x1,…,xn-1)变换为(xp,Xp+1,…,xn-1,xo,x1,…,xp-1)。要求:
【参考代码】
void Reverse(int R[], int left, int right) //逆置left->right
{
while (left < right)
{
int temp = R[left];
R[left] = R[right];
R[right] = temp;
left++; right--;
}
}
void Left(int R[], int n, int p)
{
if (p > 0 && p < n)
{
Reverse(R, 0, n - 1);
Reverse(R, 0, n-p-1);
Reverse(R, n-p, n-1);
}
}
【代码解析】
先将数组原地逆置,得到xn-1 , xn-2 , ... , x2 , x1
再将0->n-p-1和 n-p->n-1 位置进行逆置,最后可得。
时间复杂度位0(n),空间复杂度为1。

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐
所有评论(0)