2

で最大値を保持するインデックスを見つけたいと思いますArrayList。どのインデックスがどの値を持っているかを追跡したいので、数字の順序を維持したい (つまり、ソートしない) 必要があります。値は乱数ジェネレーターからのものであり、同じ最大値を共有する 2 つ (またはそれ以上) のインデックスを持つ可能性があります。

ArrayList

12、78、45、78

0,1,2,3 <- インデックス

(したがって、インデックス 1 と 3 には、最大値を持つ値が含まれます。インデックス 1 と 3 の値が 78 であるという事実を維持したいと思います。単に新しいものを作成し、新しいArrayListインデックス 0 と 1 を持ちたくはありません。ArrayList値を持っています 78)

したがって、最大値を持つすべてのインデックスを見つけたいと思います。これは、複数のインデックスがある場合にタイを「破る」ためにそれらを使用して何かを行うためです。では、最大値を含むインデックスを見つけて、インデックスと値の関係を維持するにはどうすればよいでしょうか?

私は次のメソッドを書きました:

public static ArrayList<Integer> maxIndices(ArrayList<Integer> numArrayList) {
// ???  
    return numArrayList;
}

public static void removeElement(ArrayList<Integer> numArrayList, int index) {
    numArrayList.remove(index);
}

public static int getMaxValue(ArrayList<Integer> numArrayList) {
    int maxValue = Collections.max(numArrayList);
    return maxValue;
}

public static int getIndexOfMaxValue(ArrayList<Integer> numArrayList, int maxVal) {
    int index = numArrayList.indexOf(maxVal);
    return index;
}
4

2 に答える 2

3
public static ArrayList<Integer> maxIndices(ArrayList<Integer> list) {
    List<Integer> indices = new ArrayList<Integer>();
    int max =  getMaxValue(list);
    for (int i = 0; i < list.size(); i++) {
       if(list.get(i) == max) {
           indices.add(list.get(i));
        }
     }

     return indices;
}
于 2012-12-07T03:09:44.427 に答える
1

O(n)ソリューション:

   public static List<Integer> maxIndices(List<Integer> l) {
        List<Integer> result = new ArrayList<Integer>();
        Integer candidate = l.get(0);
        result.add(0);

        for (int i = 1; i < l.size(); i++) {
            if (l.get(i).compareTo(candidate) > 0) {
                candidate = l.get(i);
                result.clear();
                result.add(i);
            } else if (l.get(i).compareTo(candidate) == 0) {
                result.add(i);
            }
        }
        return result;
    }
于 2012-12-07T05:11:55.090 に答える