2012-07-03 32 views

回答

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)。

7

如果您的語言支持它,請使用設置的數據結構,您也可以查看保留所查看元素的哈希表。

在Python中,你可以嘗試

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

n_already_seen將表明如果n已經看到一個布爾值。

+0

如果我可以標記2作爲答案,我會,感謝張貼! – box86rowh

+0

我覺得發佈一個只是你的更長版本的答案是絕對愚蠢的。我完全沒有注意到,我真的很抱歉! –

2

您可以使用散列表或使用散列的數據結構集類型。然後,您可以將所有元素插入散列表或哈希集,並且在插入時檢查元素是否已經在表/集中。如果出於某種原因,您不想隨時檢查,則可以插入所有數字,然後檢查結構的大小是否小於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; 
} 
相關問題