我需要计算数组中的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的新手,我尝试过彻底搜索,但无法找到与我的输入/输出类似的数组重复问题,但是如果有人已经问过我很抱歉此
答案 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;
}