2015-09-06 34 views
-1

我想弄清楚如何檢查我的數組中的所有23個數字(數字是隨機生成的)不是彼此相等,但我不知道如何做到這一點沒有超級可笑的語句。有沒有其他辦法可以做到這一點?另一個選擇是檢查數組中的任何兩個數字是否相等,但我提出問題的原因與我所做的一樣,因爲我認爲檢查每對數字的平等性比檢查所有數字的不平等性要困難。如何檢查數組中所有整數的不等式?

+0

嗨帕特里克,你有什麼試過?搓你的手,寫一些代碼給我們看! – moonwave99

+0

考慮尋找for-loops。 –

+0

@ moonwave99對於遲到的回覆,抱歉抱歉,我有點忘了我已經將我的facebook與堆棧溢出關聯起來,並最終使用了一段時間的其他帳戶,並且剛剛結束第一次再次登錄該帳戶。光明的一面,3年過去了,作爲軟件工程專業,我現在已經進入大學第二年了!好極了! –

回答

0

你的問題可以用被解決兩個嵌套的for循環

public static boolean hasDuplicates(int[] array) 
{ 
    for (int i = 0, length = array.length; i < length; i++) 
    { 
     int val = array[i]; 
     for (int j = 0; j < i; j++) 
     { 
      if (array[j] == val) 
      { 
       return true; 
      } 
     } 
    } 

    return false; 
} 

第一環路的陣列中的每個元件遍歷,而第二個檢查是否有任何值的外環的索引之前等於array[i]的值。您可以安全地使用j < i以提高性能並確保它不會在同一元素上返回true。

0

可以使用的算法像以下測試每個數組元素是否唯一:

boolean everyNumberIsUnique(int[] numbers) { 
    for(int i = 0; i < numbers.length; i++) { 
    for(int j = i + 1; j < numbers.length; j++) { 
     if(numbers[i] == numbers[j]) return false; 
    } 
    } 
    return true; 
} 

它簡單地彼此抵靠每個數字比較,並返回false如果任何兩個數是相等的。

+0

這將不起作用,它會將'array [1]'與自身進行比較並立即返回false。 – Clashsoft

+0

@Clashsoft感謝提示,經典錯誤。忘了補充+ i。 –

0

如果您的數字上限相對較低(比如說少於100萬)並且不關心內存使用情況,那麼您可以創建一個布爾數組並將每個元素設置爲true(如果其索引處於你的數組。這是O(n),所以它可能是你能做的最好的,但是,無可否認,你必須符合上述標準。

public boolean allDifferent(int[] numbers) 
{ 
    //everything in the array defaults to false 
    boolean[] array = new boolean[upperBound+1]; 

    for (int i = 0; i < numbers.length; i++) 
    { 
     if (array[numbers[i]]) //if we've already seen this number (aka duplicate) 
     { 
      return false; 
     } 

     array[numbers[i]] = true; //note that we have now seen this number 
    } 

    return true; 
} 
+0

布爾數組可能不是最好的解決方案,因爲每個元素都佔用一個完整的字節。一個'java.util.BitSet'可能是一個更快的選擇,它不具有通用Set的缺點。 – Clashsoft

+0

@Clashsoft我不知道'BitSet'是一件事情。但我曾警告說,雖然它具有線性時間複雜性,但該解決方案確實使用了一堆內存。 – Aderis

相關問題