查询之前是否查询过某个数

先前cf做题时,碰到了一些困惑,就此记下。

首先数组里面查询某个数的复杂度已经确定,一种是无序时,O(n)遍历查找,一种是有序是二分O(logn)查找。

那么如果要查询之前是否查询过该数,有那些方法呢?

方法一:
待查询数组a,新建一个数组b存储之前查询过的数字。
然后在b数组里面查找,如果需要立即输出结果,则O(n)去遍历,不然可以排好序,再二分查找。

方法二:
待查询数组a,新建一个map对象b,每次查询都再map里面新加入该元素,最后用map里的find函数(由于map是用红黑树维护)O(logn)查找。

方法三:
如果查询的数的范围比较小的话,可以新建一个b数组,用下标表示一个数,然后标记1表示查询过。
如果数范围较大并且还存在负数的时候,可以这样,对于待查询数组a,新建一个数组b存储去重后的数组a,可以用unique和resize函数,然后将数组a中的每一个元素值用lower_bound函数在b数组中查询来离散化成下标,最后新建一个大小为a.size()的used数组记录之前是否查询过该元素(查询过标记1),然后每次查询的时候就只查询一个下标是否被查询过即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值