如何在不使用SET的情况下有效地从数组中删除重复项我被要求编写自己的实现来删除数组中的重复值。这是我所创造的。但是在测试了1,000,000个元素之后,它花了很长时间才完成。我能做些什么来改进我的算法,或者删除任何bug吗?我需要写我自己的实现,而不是使用Set, HashSet等等。或任何其他工具,例如迭代器。只是一个删除重复项的数组。public static int[] removeDuplicates(int[] arr) {
int end = arr.length;
for (int i = 0; i < end; i++) {
for (int j = i + 1; j < end; j++) {
if (arr[i] == arr[j]) {
int shiftLeft = j;
for (int k = j+1; k < end; k++, shiftLeft++) {
arr[shiftLeft] = arr[k];
}
end--;
j--;
}
}
}
int[] whitelist = new int[end];
for(int i = 0; i < end; i++){
whitelist[i] = arr[i];
}
return whitelist;}
3 回答
catspeake
TA贡献1111条经验 获得超0个赞
int end = arr.length;Set<Integer> set = new HashSet<Integer>();for(int i = 0; i < end; i++){ set.add(arr[i]);}
Iterator it = set.iterator();while(it.hasNext()) { System.out.println(it.next());}
大话西游666
TA贡献1817条经验 获得超14个赞
注意:我假设数组是排序的。
int[] input = new int[]{1, 1, 3, 7, 7, 8, 9, 9, 9, 10};int current = input[0];boolean found = false;for (int i = 0; i < input.length; i++) { if (current == input[i] && !found) { found = true; } else if (current != input[i]) { System.out.print(" " + current); current = input[i]; found = false; }}System.out.print(" " + current);
1 3 7 8 9 10
添加回答
举报
0/150
提交
取消