【发布时间】:2013-10-26 19:15:15
【问题描述】:
我必须编写一个方法,该方法接受一个已经按数字顺序排序的整数数组,然后删除所有重复的数字并返回一个仅包含没有重复的数字的数组。然后必须打印出该数组,因此我不能有任何空指针异常。该方法必须在 O(n) 时间内,不能使用向量或散列。这是我到目前为止所拥有的,但它只有前几个数字按顺序排列,没有重复,然后将重复的数字放在数组的后面。我无法创建临时数组,因为它给了我空指针异常。
public static int[] noDups(int[] myArray) {
int j = 0;
for (int i = 1; i < myArray.length; i++) {
if (myArray[i] != myArray[j]) {
j++;
myArray[j] = myArray[i];
}
}
return myArray;
}
【问题讨论】:
-
你不能convin这两个操作,排序和删除重复项?我认为这是更好的解决方案。
-
@astinx - 好吧,他正在对数组进行预排序,因此不需要组合操作。请注意,大多数“好”排序被认为在 O(n log n) 时间内运行,这超过了 O(n) 时间,因此无论如何这对他没有帮助。请注意,虽然组合的搜索/删除操作可能会更快,但这样做会干扰 可组合性,即从较小的函数中生成较大函数的能力(即,正常的过程是有一个sort 函数和 remove-sorted-duplicates 函数,并将它们结合起来)。
-
你能看一下我的回答吗?我编辑了 t 将解决您的问题。另外,请尝试对答案发表评论并提供反馈。
标签: java arrays sorting duplicates