如果我有一个像这样的数组:
int [] numb = {0, 1, 2, 3};
我想找到数组的最小值。我只是做一个快速简单的循环来找到它,但如果我有重复的最小值,例如:
int [] numb = {0, 1, 0, 2, 3};
如何找到所有最小值的位置以及它在数组中出现的次数?
如果已经问过这个问题,我没有找到它,但请随时将我引导到正确的线程/问题。
此代码只需一个循环即可完成您想要的所有操作。它也不需要您硬编码初始“最小值”。
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[]{})));
当你对一个元素进行罚款时,不要从循环中中断,而是增加一个计数器来计算它在数组中重复的次数。并跟踪它出现的所有地方。或者让您的方法返回找到第一个元素的索引,然后再次运行相同的方法,以更高的索引除外
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++;
}
}
尝试使用 Guava 库 multiset。
如果您不使用它,请参阅此链接 http://www.zparacha.com/minimum-maximum-array-value/