我被要求编写自己的实现来删除数组中的重复值。这是我创建的。但是在对 1,000,000 个元素进行测试后,需要很长时间才能完成。我可以做些什么来改进我的算法或删除任何错误吗?
我需要编写自己的实现 - 不要 使用 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;
}
原文由 ashur 发布,翻译遵循 CC BY-SA 4.0 许可协议
由于这个问题仍然受到很多关注,我决定通过 从 Code Review.SE 复制这个答案 来回答它: