Java - 在不使用外部类或方法的情况下计算数组中的重复项?

时间:2018-04-21 23:00:10

标签: java arrays duplicates

我需要计算数组中的dupes数量,但我只限于使用数组,没有HashSets或ArrayLists。

以下是具有预期输出的示例输入:

numDuplicates(new double[] { }) --> 0
numDuplicates(new double[] { 11.0 }) --> 0
numDuplicates(new double[] { 11.0, 11.0, 11.0, 11.0 }) --> 3
numDuplicates(new double[] { 11.0, 11.0, 11.0, 11.0, 22.0, 33.0, 44.0, 44.0, 44.0, 44.0, 44.0, 55.0, 55.0, 66.0, 77.0, 88.0, 88.0 }) --> 9
numDuplicates(new double[] { 11.0, 22.0, 33.0, 44.0, 44.0, 44.0, 44.0, 44.0, 55.0, 55.0, 66.0, 77.0, 88.0 }) --> 5

这是我的代码,但它在每个数字后计算重复数,返回一个膨胀计数,即{11.0,11.0,11.0,11.0}返回6而不是3:

public static int numDuplicates (double[] list) {

    int dupCount = 0;
    for (int i = 0; i < list.length; i++) {
        for (int j = i + 1; j < list.length; j++) {
            if (list[i] == list[j]) {
                dupCount++;
            }
        }
    }

    return dupCount; //TODO1: fix this
}

注意:我是Stack的新手,我尝试过彻底搜索,但无法找到与我的输入/输出类似的数组重复问题,但是如果有人已经问过我很抱歉此

2 个答案:

答案 0 :(得分:1)

简单修复:

public static int numDuplicates (double[] list) {

    int dupCount = 0;
    for (int i = 0; i < list.length; i++) {
        for (int j = i + 1; j < list.length; j++, i++) { // HERE it is
            if (list[i] == list[j]) {
                dupCount++;
            }
        }
    }

    return dupCount;
}

除了i之外,我做的是增加j。这样做的目的是在i停止的地方开始j。我之所以这样做的原因是因为你说它正在返回一个膨胀的数量,所以我认为这一定是因为你做了太多的计数而且这正是发生的事情。

i始终以1为增量,而不是找到size of the last duplicate counts的增量,因此始终重复计数。

关于j++, i++如何运作 - 它只是一系列表达式。 Java允许您使用逗号分隔评估为相同类型的表达式。

根据评论,您可以删除外部循环:

public static int numDuplicates (double[] list) {

    int dupCount = 0;
    for (int i = 1; i < list.length; i++) {
        if (list[i] == list[i - 1]) {
            dupCount++;
        }
    }
    return dupCount;
}

答案 1 :(得分:0)

您可以使用其他数组:

public static int numDuplicates(double[] list) {

    double[] duparray = new double[list.length];
    int dupCount = 0;
    for (int i = 0; i < list.length; i++) {
        for (int j = i + 1; j < list.length; j++) {
            if (list[i] == list[j] && !(list[i] == duparray[i])) {
                duparray[i] = list[i];
                dupCount++;
            }
        }
    }

    return dupCount;
}