先前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),然后每次查询的时候就只查询一个下标是否被查询过即可。