2013-04-03 34 views
1

如果我有一個像這樣的數組:查找數組中的重複數據的位置

int [] numb = {0,1,2,3};

我想找到數組的最小值。我只是做一個簡單的循環來找到它,但如果我有重複的最小值,如:

int [] numb = {0,1,0,2,3};

如何查找所有最小值的位置以及它在數組中顯示的次數?

如果這個問題已被問到,我沒有找到它,但隨時引導我到正確的線程/問題。

+0

我認爲你將不得不寫第二個for循環找到'min' – frickskit

+0

@frickskit數和指數不一定 - 看到我的回答:) – Catchwa

+0

@Catchwa upvoted。 – frickskit

回答

1

此代碼你在短短的一個循環需要exept。它也不要求你以最初的'最小'值進行硬編碼。

int[] values = {6, 2, 4, 3, 1, 1, 7, 2, 1}; 
    Integer minimum = null; 
    List<Integer> indexes = new ArrayList<Integer>(); 
    for(int i = 0; i < values.length; i++) 
    { 
     if(minimum == null || values[i] < minimum) 
     { 
      minimum = values[i]; 
      indexes.clear(); 
      indexes.add(i); 
     } 
     else if(minimum == values[i]) 
     { 
      indexes.add(i); 
     } 
    } 
    System.out.println("The minimum was: " + minimum); 
    System.out.println("It occurred " + indexes.size() + " times in the array"); 
    System.out.println("Indexes it occured at were: " + Arrays.toString(indexes.toArray(new Integer[]{}))); 
+0

這是完美的!謝謝!現在我知道如何解決這個問題。 –

0

當你罰款一個元素不要從循環中斷,而是增加一個計數器來計算它在數組中重複的次數。並跟蹤它出現的所有地方。或者讓你的方法返回的是第一個元素被發現索引,然後再次運行同樣的方法在較高的指數

0
int[] array = {0, 1, 0, 2, 3} 
int mininum=999999  //initialize to a number larger than anything in the array would reasonably be 
for (int curr = 0; curr < array.size; curr++) { 
    if (array1[curr] < minimum) { 
      minimum = array[i]; 
    } 
} 
int duplicates = 0; 
for (int i : array){ 
    if (i == minumum){ 
     duplicates++; 
    } 
} 
+0

這是否會計算最小值? – Catchwa

+0

這將計算最小值並告訴你它重複多少次。這就是你需要做的一切嗎?如果沒有,請給我多一點你需要在這裏完成的信息。 – drewmoore

+1

硬編碼'999999'可能適用於微不足道的示例,但不是非常明智。更好的一步可能是Integer.MAX_VALUE,但我認爲最好的方法是採用類似於我的答案的方法。 – Catchwa