数据结构算法大题---线性表02题

在这里插入图片描述
分析: 这是2010年408数据结构的一道算法大题,考察线性表知识。题中要求设计一个在时间和空间都尽可能高效的算法;
(1)思路: 可把该数组R看作两个数组A和B的组合,其中A数组中有p个元素且数组下标为从0~p-1,B数组中有n-p个元素且数组下标为从p~n-1。然后把A和B分别逆置,再整体逆置即可,具体图解如下:在这里插入图片描述
(2)代码实现如下:

void Reverse(int R[],int from,int to)//此Reverse函数的作用是将传进来的一个数组进行逆置,其中from和to分别表示要逆置数组的始末位置
{
	int 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);//可看作是数组A的逆置
	Reverse(R,p,n-1);//可看作是数组B的逆置
	Reverse(R,0,n-1);//可看作是是数组A和B整体逆置
}

(3): 上述三个代码中,时间复杂度分别为:O(p/2)、O((n-p)/2)、O(n/2)。所以综上。该算法的时间复杂度为O(n),空间复杂度为O(1)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值