我写了一个方法来查找数组的众数,数组的长度是10,所以数组中有十个数字,所以大小已满。我的问题是,如果模式超过一个数字,我如何修改代码以显示这两个数字!
例如,如果我的数组看起来像这样 [1,1,1,2,2,2,3,5,6,8]
在这种情况下模式是 1 和 2 。在我的代码中,它只打印它获得的第一个模式。
所以打印模式为1。
public static int arryMode (int [] randomList) {
int maxValue = 0;
int maxCount = 0;
for (int i = 0; i < randomList.length; ++i) {
int count = 0;
for (int j = 0; j < randomList.length; ++j) {
if (randomList[j] == randomList[i]) {
++count;
}
}
if (count > maxCount) {
maxCount = count;
maxValue = randomList[i];
}
}
return maxValue;
}
最佳答案
您将需要收集几个最大值,并且当找到更大的计数最大值时,您需要从新的最大值开始,而不是替换 maxValue。对于所有等于最大值的情况,需要额外的情况。
要不重复添加最大值,请查看新的 randomList[i] 是否已在最大值中,和/或使用 Set。
public static Set<Integer> arryMode(int[] randomList) {
Set<Integer> maxValues = new LinkedHashSet<>(10);
int maxCount = 0;
for (int i = 0; i < randomList.length; ++i) {
if (maxValues.contains(randomList[i])) { // Heuristic.
continue;
}
int count = 0;
for (int j = 0; j < randomList.length; ++j) {
if (randomList[j] == randomList[i]) {
++count;
}
}
if (count > maxCount) {
maxCount = count;
maxValues.clear();
maxValues.add(randomList[i]);
} else if (count == maxCount) {
maxValues.add(randomList[i]);
}
}
return maxValues;
}
与
for (int maxValue : maxValues) { ... }
关于java - 一种查找模式编号的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20501349/