【考研数据结构刷题】408【2010年第 42题】

【问题描述】

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Code丶Q

让我们共同进步!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值