0

配列内の最大数と最小数を正確に見つける方法がわかりません。

パラメータとして整数の ArrayList を受け入れ、リストに含まれる値の範囲を返すメソッド range を記述します。これは、最大要素と最小要素の差よりも 1 大きい値として定義されます。たとえば、list という変数に次の値が格納されているとします。

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

range(list) の呼び出しは 23 を返す必要があります。これは、値のペア間の最大差 (29 - 7 + 1 = 23) よりも 1 大きいためです。空のリストは、範囲が 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;
}

どうもありがとうございます!

4

7 に答える 7

3

この目標を達成する方法は他にもあります。

コレクションの使用 (よりコンパクトですが、リストを 2 回反復するため、コストが高くなります。1 回は最大値を見つけ、もう 1 つは最小値を見つけます):

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

または、次のような独自のアルゴリズムを使用します (コードは増えますが、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;
    }
}
于 2013-09-24T21:30:06.017 に答える
3

Collections.minCollections.maxを使用しない理由

int difference = Collections.max(list) - Collections.min(list);
于 2013-09-24T21:26:46.313 に答える
1

このタスクには次の 2 行しか必要ありません。

Collections.sort(list);
return list.isEmpty() ? 0 : list.get(list.size() - 1) - list.get(0);
  • Java JDK の API を使用して面倒な作業を行う
  • 問題をどう捉えるかが重要
  • コードが少ないのは良いことです (読みやすい限り)
于 2013-09-24T21:25:59.217 に答える
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;
}
于 2013-09-24T21:51:09.903 に答える