2015-01-14 33 views
0

我已經給了一個數組。我需要從中獲取最小值,然後返回數組中的值。我對Java更新,而且我只有Python方面的經驗。這是我的代碼到目前爲止。如何從Java數組中返回一個位置

public static int minPosition (int[] list) { 
    int currMin = list[0]; 
    int index = list.length-1; 
    int currPos = 0; 

    while (index >= 0){ 
     if (currMin > list[index]) 
      currMin = list[index]; 
     if (currMin > list[index]) 
      currPos = index; 

     index--; 

    } 
    return currPos; 
} 

這些是我自動調用的數組。

minPosition(new int[] { -7 })); 
minPosition(new int[] { 1, -4, -7, 7, 8, 11 })); 
minPosition(new int[] { -13, -4, -7, 7, 8, 11 })); 
minPosition(new int[] { 1, -4, -7, 7, 8, 11, -9 })); 

非常感謝您的建議。

回答

3
if (currMin > list[index]) 
     currMin = list[index]; 
    if (currMin > list[index]) 
     currPos = index; 

如果第一if條件爲真,那麼在第二個條件檢查的時候,curMin將正好等於list[index],所以它會永遠大於...

你可能想要

 if (currMin > list[index]) { 
     currMin = list[index]; 
     currPos = index; 
    } 
+0

不要緊,你是正確的我的代碼中有一個小錯誤。非常感謝你! – cmsp

1

您可以添加此方法並傳遞一個整數數組。它將返回數組中最小值的整數的索引位置。

public static int getMinIndex(int[] array) { 
    int minIndex = -1; 
    int currentMinValue = Integer.MAX_VALUE; 
    for(int i =0; i< array.length; i++) { 
     if(array[i] < currentMinValue) { 
      minIndex = i; 
      currentMinValue = array[i]; 
     } 
    } 
    return minIndex; 
} 
0

您可以用流做到這一點:

IntStream(0, list.length).min((i1, i2) -> list[i1] - list[i2]).get(); 
0

這種解決方案並不必要跟蹤當前最低的。這使代碼更容易遵循,並留下更少的錯誤空間。它也從一開始就開始搜索,你的原始代碼沒有做。 (我不知道爲什麼會這樣,因爲你大概會希望有一個最低值,而不是最後的第一個索引。)

public static int minPosition (int[] list) { 
    if(list == null || list.length = 0){ 
    return -1; 
    } 

    int minPos = 0; 

    for(int i = 0; i < list.length; i++){ 
    if(list[i] < list[minPos]){ 
     minPos = i; 
    } 
    } 
    return minPos; 
} 
+0

來自不夠知識的人的問題。將minimun值存儲到變量而不是在每次迭代中使用list [minPos]來訪問它會不會更快? – Reti43

+0

@ Reti43它更快,但是在O(1)時間內索引數組將會發生,也就是說,不管數組多大,它總是會花費相同的時間量。憑藉今天的計算速度,我更喜歡邊緣速度改進的準確性。 –

0

假設不爲空數組,可以先對列表進行排序,然後返回排序列表中的第一個。這不會像上面的一些例子那樣高效,但代碼會更短。

public static int minPosition (int[] list) { 
     Arrays.sort(list); 
     return list[0]; 
} 
+1

問題要求的是最小值的位置,而不是數值。你可以重寫你的答案,作爲'返回新ArrayList (列表).indexOf(列表[0]);'。 –

相關問題