如何判断数组中的所有元素都不相等


如题,有没有一种高效的算法实现这个功能

编码 C++

高町菜乃叶 11 years, 2 months ago

最高效就是 O(n) 了,借助 hashmap 来做。

有没有小于 O(n) 的算法呢?
小于 O(n) 意味着,在匹配的时候可以跳过一些数。比如 O(log(n)) 的话,意味着每次能够跳过一半的元素。但是,需要确定不存在重复元素,就说明对每个元素都应该和其他元素比较一次。如果能够跳过一些元素,那就说明之前匹配的元素或者数组内元素的分布应该带有某种信息能够提示不需要匹配这些元素(也就是跳过了)。
举个例子,你提前知道一个 int 数组是递增的,且后一项比前一项最多大 1。这样的话,是可以在常量时间内判断是否有重复。 ((MAX - MIN) / array.size()) < 1 则一定有重复。
总之,对于某些有特殊限定的数组,可以用小于 O(n) 的算法判断所有元素都是 unique 的;但对于一般的数组,O(n) 才是最高效的算法。

不给力啊老湿 answered 11 years, 2 months ago

Your Answer