在ArrayList中查找最大数量(超过一个最大值的可能性)

时间:2012-12-07 02:57:43

标签: java arraylist

我想找到在ArrayList中保持最大值的索引/索引。我想保留数字所在的顺序(换句话说没有排序)因为我想跟踪哪个索引具有什么值。这些值来自随机数生成器,并且可能有两个(或更多)索引共享相同的最大值。

示例ArrayList

  

12,78,45,78

     

0,1,2,3< - indices

(所以索引,1和3包含具有最大值的值。我想保持索引1和3的值为78的事实。我不想只创建一个新的ArrayList和让新ArrayList的索引0和1具有值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;
}

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分: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;
    }