我有n個整數,我需要一個快速的邏輯測試,看看他們是不同的,我不想比較每個組合,找到一個匹配...在一個漂亮和優雅的方法任何想法?如何簡單檢查一組n個數字是否全都不同?
我不在乎你的想法是什麼編程語言,我可以轉換!
我有n個整數,我需要一個快速的邏輯測試,看看他們是不同的,我不想比較每個組合,找到一個匹配...在一個漂亮和優雅的方法任何想法?如何簡單檢查一組n個數字是否全都不同?
我不在乎你的想法是什麼編程語言,我可以轉換!
感謝交流和傳遞性,您不必檢查每個組合;您可以簡單地沿着列表進行檢查,並檢查在之後出現的每個條目的每個條目。例如:
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
)。
如果您的語言支持它,請使用設置的數據結構,您也可以查看保留所查看元素的哈希表。
在Python中,你可以嘗試
seen={}
n_already_seen=n in seen
seen[n]=n
n_already_seen
將表明如果n已經看到一個布爾值。
您可以使用散列表或使用散列的數據結構集類型。然後,您可以將所有元素插入散列表或哈希集,並且在插入時檢查元素是否已經在表/集中。如果出於某種原因,您不想隨時檢查,則可以插入所有數字,然後檢查結構的大小是否小於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;
}
如果我可以標記2作爲答案,我會,感謝張貼! – box86rowh
我覺得發佈一個只是你的更長版本的答案是絕對愚蠢的。我完全沒有注意到,我真的很抱歉! –