一种查找模式编号的方法

时间:2013-12-10 17:34:01

标签: 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;
}

2 个答案:

答案 0 :(得分:1)

您需要收集几个最大值,而不是在找到更大的最大值时替换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) { ... }

答案 1 :(得分:0)

您可以使用ArrayList<Integer>来存储模式的所有值。 ArrayList是一个表现为可调整大小的数组的对象。每次找到新模式时,如果其计数等于先前的最大计数,则将其添加到列表中。如果计数大于先前的最大计数,则清除列表,并将新模式添加到列表中。

阅读Java tutorial on collections