如果我有一个类似的数组:
int [] numb = {0,1,2,3};
我希望找到数组的最小值。我只是做一个快速简单的循环来找到它,但如果我有重复的最小值,例如:
int [] numb = {0,1,0,2,3};
如何找到所有最小值的位置以及它在阵列中显示的次数?
如果已经提出这个问题,我没有找到它,但随时可以指导我找到正确的主题/问题。
答案 0 :(得分: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[]{})));
答案 1 :(得分:0)
当你对一个元素进行罚款时不要从循环中断开,而是递增一个计数器来计算它在数组中重复的次数。并跟踪它出现的所有地方。或者让你的方法返回找到的第一个元素的索引,然后再次运行相同的方法执行更高的索引
答案 2 :(得分: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++;
}
}
答案 3 :(得分:0)
尝试使用Guava库multiset。
如果您不使用它,请参阅此链接 http://www.zparacha.com/minimum-maximum-array-value/