我怎样才能简单地检查一组n个数字是否都不同?

时间:2012-07-03 22:03:30

标签: math numbers logic

我有n个整数,我需要一个快速的逻辑测试,看看它们都是不同的,我不想比较每个组合来找到匹配...任何关于一个漂亮而优雅的方法的想法?

我不在乎你的想法是什么编程语言,我可以转换!

3 个答案:

答案 0 :(得分:7)

如果您的语言支持,请使用设置数据结构,您也可以考虑保留已查看元素的哈希表。

在python中你可以尝试

seen={}
n_already_seen=n in seen
seen[n]=n

n_already_seen将是一个布尔值,表示是否已经看到过n。

答案 1 :(得分:2)

由于交流和传递性,您不必检查每个组合;您可以简单地向下列表,并针对之后的每个条目检查每个条目。例如:

bool areElementsUnique( int[] arr ) {
    for( int i=0; i<arr.Length-1; i++ ) {
        for( int j=i+1; j<arr.Length; j++ ) {
            if( arr[i] == arr[j] ) return false;
        }
    }
    return true;
}

请注意,内部循环不是从头开始,而是从下一个元素(i+1)开始。

答案 2 :(得分:2)

您可以使用哈希表或使用哈希的Set类型的数据结构。然后,您可以将所有元素插入到哈希表或哈希集中,并在插入时检查该元素是否已在表/集中。如果由于某种原因你不想随意检查,你只需插入所有数字,然后检查结构的大小是否小于n。如果它小于n,则必须有重复的元素。否则,它们都是独一无二的。

这是一个非常紧凑的Java解决方案。时间复杂度是摊销O(n),空间复杂度也是O(n)。

public boolean areAllElementsUnique(int [] list)
{
    Set<Integer> set = new HashSet<Integer>();
    for (int number: list)
        if (set.contains(number))
            return false;
        else
            set.add(number);
    return true;
}