2017-06-04 54 views
0

我有一個包含數字的數組。查找數組中兩個最小值的索引

我得到的兩個最小的值(可以是相同的數目)在該數組中的O(N),但的我不能找出如何得到這個兩個值的索引。

例如:在{1,2,3,1,5}的答案將是索引0和索引3。這是我正在使用的代碼:

public static void minMin(int arr[]){ 
    int min1 = weights[0], min2 = weights[1]; 
     if(min1 > min2){ 
     int temp = min1; 
     min1 = min2; 
     min2 = temp; 
     } 
     for (int i = 2; i < weights.length; i++) { 
     if(weights[i] < min1){ 
     int temp = min1; 
     min1 = weights[i]; 
     min2 = temp; 
     }else if(weights[i] < min2){ 
     min2 = weights[i]; 
     } 
     } 
} 
+0

請參閱[此問題](https://stackoverflow.com/questions/6171663/how-to-find-index-of-int-array-in-java-from-a-given-value)。 –

+0

備案:我更新了我的答案,事情更簡單。但是,再次,我沒有放棄代碼,因爲我不是在這裏做你的功課。我只是試着幫你自己做。 – GhostCat

回答

1

Ghostcat已經給出了答案,你只是不明白:

我只有一個指標,因爲它的一個for循環,我需要兩個元素的索引的..

剛剛創造更多變量:

public static void main(String[] args) { 

    minMin(new int[] { 1, 2, 3, 1, 5 }); 
} 

// Careful: this code only works for arr.lengh > 1 
public static void minMin(int arr[]) { 

    int min1 = arr[0]; 
    int min2 = arr[1]; 

    int index1 = 0; 
    int index2 = 1; 

    if (min1 > min2) { 
     int temp = min1; 
     min1 = min2; 
     min2 = temp; 

     index1 = 1; 
     index2 = 0; 
    } 

    for (int i = 2; i < arr.length; i++) { 
     if (arr[i] < min1) { 
      int temp = min1; 
      min1 = arr[i]; 
      min2 = temp; 
      index2 = index1; 
      index1 = i; 
     } else if (arr[i] < min2) { 
      min2 = arr[i]; 
      index2 = i; 
     } 
    } 

    System.out.println("Smallest: " + min1 + ", index " + index1); 
    System.out.println("2nd smallest: " + min2 + ", index " + index2); 
} 

輸出:

Smallest: 1, index 0 
2nd smallest: 1, index 3 
+0

我個人會創建一個類來保存值並存儲值,以保持算法的邏輯與存儲的邏輯清楚。這也有助於將任務分成兩個更小,更容易的任務。但那只是我的個人意見。 – Dennux

+0

非常感謝你! – Nauruto

+1

備案:我不介意你接受了這個接受,但是:做作業問題的所有部分是不鼓勵的。我試圖給出一些提示,讓他自己解決它。你方便地爲他解決了它。所以你實際上搶奪了重要的學習步驟:-) – GhostCat

5

除了本地保持最小的變量也需要索引的變量。

您可以用0/1對它們進行初始化,並在更改其他變量時更新它們。

進一步思考:另一個選項沒有更多的變量。存儲值+索引很方便(但註釋是正確的,你可能會使用不同的類來做到這一點),但不是強制性的。因爲當您有索引時,您總是可以獲取

從這個意義上說:你可以改變你的代碼來記住indixes。

+0

我只有一個索引,因爲它的一個for循環,我需要索引的兩個元素.. – Nauruto

+0

不,ghostcat是正確的。你只需要將值存儲在變量 – Dennux

+0

簡單而高效,就像平常一樣:) – davidxxx

相關問題