2013-09-24 55 views
0

之間我無法搞清楚究竟如何讓它找到數組中的最大數,最小數的Java範圍尋找差異。最大和最小的INT

收件接受整數的ArrayList爲參數的方法範圍和返回包含在列表中的值的範圍,其被定義爲1以上的最大和最小的元素之間的差異。例如,如果一個所謂的列表變量存儲下列值:

[18,14,29,12,7,25]

的範圍(列表)的呼叫應該返回23,因爲這是一個超過兩個值之間的最大差值(29 - 7 + 1 = 23)。空列表被定義爲具有範圍爲0

到目前爲止,我有這樣的:

public static int range(ArrayList<Integer> list) 
{ 
    int min = 0; 
    int max = 0; 
    int range = 0; 
    for (int i: list) 
    { 
     if (list.size() > 0) 
     { 
     range = max - min + 1; 
     } 
    } 
     return range; 
} 

非常感謝你!

+0

提示'Math.max'和'Math.min'將幫助 – MadProgrammer

+0

你應該在循環中計算分ANX max和循環後,退還差額。 –

回答

1

你比方法更才達到這一目標。

使用集合(更緊湊,但昂貴的,因爲它遍歷兩次就行了,一個找到max和一個找到分鐘):

public static int range(final ArrayList<Integer> list) { 
    if (list.isEmpty()) { 
     return 0; 
    } else { 
     return (Collections.max(list) - Collections.min(list)) + 1; 
    } 
} 

或使用自己的算法是這樣的(更多的代碼但發現最小和最大隻有一個循環):

public static int range(final ArrayList<Integer> list) { 
    if (list.isEmpty()) { 
     return 0; 
    } else { 
     int max = list.get(0); 
     int min = list.get(0); 
     for (final int i : list) { 
      if (i > max) { 
       max = i; 
      } else if (i < min) { 
       min = i; 
      } 
     } 
     return (max - min) + 1; 
    } 
} 
+0

爲什麼這是downvoted? – RandomQuestion

+0

您現在使用Math.min和Math.max代替 – MadProgrammer

+0

不,我不能這樣做,因爲: 「類型Math中的方法max(int,int)不適用於參數(ArrayList )」 –

2

你永遠不計算最大並在循環中的最小值。

提示:在這個循環中,找到最大和最小值。然後計算範圍並返回。

int min = 0; 
int max = 0; 
for (int i: list){ 
//find max and min here 
} 
return max - min + 1; 
+1

當列表包含負數時會失敗。 –

1

此任務只需要兩行:

Collections.sort(list); 
return list.isEmpty() ? 0 : list.get(list.size() - 1) - list.get(0); 
  • 使用Java JDK的API做繁重的你
  • 這是你怎麼看這是很重要的一個問題
  • 更少的代碼是好的(只要它是清晰
+0

+1爲好的解決方案 –

+0

+1現在我們只是在作弊;) – MadProgrammer

+0

如果列表爲空,此代碼可以拋出NoSuchElementException。在調用max和min方法之前,您必須檢查它。 –

0

你可以對它進行排序,然後偷看拳頭和最後一項。

public static int range(List<Integer> input) 
{ 
    if(input == null || input.size() == 0) throw new IllegalArgumentException(""); 

    if(input.size() == 1) return 0; 

    List<Integer> copy = new ArrayList(input); 

    Collections.sort(copy); 

    int min = copy.get(0); 
    int max = copy.get(copy.lenght-1); 

    return max - min; 
} 

這不是一個完美的解決方案,因爲列表可能包含空值。

您可以通過簡單的比較開始。

int min = Integer.MAX_VALUE; 
int max = Integer.MIN_VALUE; 

for(Integer integer : input) { 
    if(i == null) continue; 

    int i = integer.intValue(); 

    if(i < min) { 
    min = i; 
    } 

    if(i > max) { 
    max = i; 
    } 
} 

return max - min; 
0
public static int range(ArrayList<Integer> list){ 
    int min = list.get(0); 
    int max = list.get(0); 
    for (int i = 0; i < list.size(); i++){ 
     if (list.get(i) > max) 
      max = list.get(i); 
     if ((list.get(i) < min)) 
      min = list.get(i); 
    } 
    return max-min+1; 
}