无需借助 Set 即可高效地从数组中删除重复项
您已努力创建一个自定义解决方案来从数组中删除重复元素,但性能瓶颈已经出现。为了优化此实现,我们将分析您的方法的缺点并提出替代策略。
分析您的算法
您的算法尝试通过比较每个值来搜索重复项元素与每个后续元素。这种详尽的比较导致时间复杂度为 O(n^2)。对于大型数组,此策略可能变得极其低效。
优化方法
为了显着提高性能,我们可以考虑以下优化:
替代解决方案
虽然上述优化可以为了提高算法的性能,您还可以考虑其他已建立的技术:
实现
基于优化方法,使用哈希映射的算法的修改版本可能是:
public static int[] removeDuplicatesWithoutSet(int[] arr) { HashMap<Integer, Boolean> map = new HashMap<>(); int end = arr.length; for (int i = 0; i < end; i++) { if (map.containsKey(arr[i])) { int shiftLeft = i; for (int k = i + 1; k < end; k++, shiftLeft++) { arr[shiftLeft] = arr[k]; } end--; i--; } else { map.put(arr[i], true); } } int[] whitelist = new int[end]; for (int i = 0; i < end; i++) { whitelist[i] = arr[i]; } return whitelist; }
以上是如何在不使用集合的情况下有效地从数组中删除重复项?的详细内容。更多信息请关注PHP中文网其他相关文章!