1

如果我有一个像这样的数组:

int [] numb = {0, 1, 2, 3};

我想找到数组的最小值。我只是做一个快速简单的循环来找到它,但如果我有重复的最小值,例如:

int [] numb = {0, 1, 0, 2, 3};

如何找到所有最小值的位置以及它在数组中出现的次数?

如果已经问过这个问题,我没有找到它,但请随时将我引导到正确的线程/问题。

4

4 回答 4

1

此代码只需一个循环即可完成您想要的所有操作。它也不需要您硬编码初始“最小值”。

    int[] values = {6, 2, 4, 3, 1, 1, 7, 2, 1};
    Integer minimum = null;
    List<Integer> indexes = new ArrayList<Integer>();
    for(int i = 0; i < values.length; i++)
    {
        if(minimum == null || values[i] < minimum)
        {
            minimum = values[i];
            indexes.clear();
            indexes.add(i);
        }
        else if(minimum == values[i])
        {
            indexes.add(i);
        }
    }
    System.out.println("The minimum was: " + minimum);
    System.out.println("It occurred " + indexes.size() + " times in the array");
    System.out.println("Indexes it occured at were: " + Arrays.toString(indexes.toArray(new Integer[]{})));
于 2013-04-03T02:57:38.823 回答
0

当你对一个元素进行罚款时,不要从循环中中断,而是增加一个计数器来计算它在数组中重复的次数。并跟踪它出现的所有地方。或者让您的方法返回找到第一个元素的索引,然后再次运行相同的方法,以更高的索引除外

于 2013-04-03T02:51:22.720 回答
0
 int[] array = {0, 1, 0, 2, 3}
 int mininum=999999       //initialize to a number larger than anything in the array would reasonably be
 for (int curr = 0; curr < array.size; curr++) {
     if (array1[curr] < minimum) {
          minimum = array[i];   
     }
 }
 int duplicates = 0;
 for (int i : array){
     if (i == minumum){
         duplicates++;
     }
 }
于 2013-04-03T02:52:05.690 回答
0

尝试使用 Guava 库 multiset。

如果您不使用它,请参阅此链接 http://www.zparacha.com/minimum-maximum-array-value/

于 2013-04-03T03:11:10.873 回答