【408DS算法题】基础003-顺序表逆置

题目

设计一个算法,将顺序表a的所有元素逆置,要求算法的空间复杂度为 O ( 1 ) O(1) O(1)


实现代码

# include<iostream>
# include<algorithm>

void reverse(vector<int>& a){
    int n=a.size();
    int left=0, right=n-1;
    while(left<right){
    	swap(a[left], a[right]);
    	left++, right--;
    }
}

分析

顺序表的逆置操作相对简单,看起来也没什么推导的必要。但有时候将其作为算法中的一个小模块来使用有很好的效果(e.g. 2010年数组循环左移),因此还是有必要记一下的。

此外,本次代码中使用了<algorithm>头文件中的swap函数,使用此函数可以简单方便地交换数组中两个元素的值。
如果不使用此函数的话,交换元素通常需要新建一个临时变量,即:

int t = a[left];	// 将[left]中的值存入t, 这样[left]的值就有了备份, 可以随便覆盖
a[left] = a[right];	// 使用[right]覆盖[left], 这样[left]的值就修改完成了
a[right] = t;		// 将[right]赋值为之前备份的[left]的值, 完成[right]的值的修改
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值