我被要求编写自己的实现以删除数组中的重复值。这是我创建的。但是在对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; }
你可以借助Set集合
int end = arr.length; Set<Integer> set = new HashSet<Integer>(); for(int i = 0; i < end; i++){ set.add(arr[i]); }
现在,如果你要遍历此set,它将仅包含唯一值。迭代代码是这样的:
Iterator it = set.iterator(); while(it.hasNext()) { System.out.println(it.next()); }