【发布时间】:2016-01-01 15:22:59
【问题描述】:
我被要求编写一个接受排序数组的方法,删除在数组中找到的所有重复元素,然后为找到的每个重复元素在数组末尾放置一个 0。 p>
它还应该返回在数组中找到的唯一元素的数量。
这是我的方法:
public static int removeDups(int[] arr) {
int j = 0;
int i = 1;
int numDups = 0;
while(i < arr.length) {
if (arr[i] == arr[j]) {
i++;
numDups++;
}
else {
arr[++j] = arr[i++];
}
}
for (int k = j+1; k < arr.length; k++) {
arr[k] = 0;
}
return (j);
}
它成功地找到了数组中的所有重复数字,并在末尾放置了正确数量的 0,但它并不总是为唯一元素的数量返回正确的值。
例如对于数组:
{ 6 10 19 21 23 26 27 36 38 45 }
唯一元素的数量应该是 10,但它返回 9。
我做错了什么?
【问题讨论】:
-
@TimBiegeleisen 我不能使用该方法,因为我不允许使用嵌套循环,并且数组中的任何元素最多只能移动一次。
-
你不能直接返回
j + 1吗?这就是您设置k = j + 1以添加零时所做的事情。 -
您正在使用
j保留最后一个唯一编号的索引。所以唯一数字的计数是j + 1。最后返回j + 1。 -
@JonnyHenly 如果我返回 (j+1),返回的值仍然是错误的,不等于唯一元素的数量。
-
您说它返回 9 但应该返回 10,9 + 1 = 的 10。这只是您提供给我们的示例数组,具有重复项的数组在前后是什么样子的?
标签: java arrays return return-value