java - 一种查找模式编号的方法

标签 java arrays mode

我写了一个方法来查找数组的众数,数组的长度是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/

相关文章:

java - 在 Java3D 中创建发光球体

java - Spring Query DSL 给出空指针异常

java - 删除重复项并将收集的元素排序为 Map 的值

javascript从两级数组中提取id以获取新对象中的键值对

c - 给定一个已排序整数数组,并在 c 中找到与给定数字最接近的值。数组可能包含重复值

iOS 后台应用程序 : best way to run app

data.table R 中的行明智模式

java - Maven 无法编译依赖于 rt.jar 的类

c++ - 在数组中查找模式的最有效方法?

python - 查找两个可迭代对象共享的匹配值数量的更有效方法?