【问题描述】

设将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。

Logo

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

更多推荐