我有n个整数,我需要一个快速的逻辑测试,看看它们都是不同的,我不想比较每个组合来找到匹配...任何关于一个漂亮而优雅的方法的想法?
我不在乎你的想法是什么编程语言,我可以转换!
答案 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;
}