如何判断整数数组是否存在重复元素?现有实现代码运行异常如何解决
错误原因
- 核心逻辑缺陷:代码中每次元素比较都会覆盖
hasDuplicates的取值,即便前面已经找到重复元素,后续遇到不相等的元素对时,仍会将hasDuplicates重置为false。以你给出的测试数组为例,最后一次执行的比较是input[3] = 4和input[4] = 1,二者不相等,因此最终hasDuplicates被赋值为false,和实际结果不符。 - 缺少提前终止逻辑:找到重复元素后无需继续遍历剩余元素,当前代码会执行全部比较,存在不必要的性能损耗。
修正后实现
双层循环版本(兼容原实现思路)
int[] input = {1, 2, 3, 4, 1}; boolean hasDuplicates = false; outerLoop: for (int i = 0; i < input.length; i++) { for (int j = i + 1; j < input.length; j++) { if (input[i] == input[j]) { hasDuplicates = true; break outerLoop; // 找到重复直接跳出全部循环 } // 无需处理不相等的分支,不相等时保持原有状态即可 } }
哈希集优化版本(时间复杂度更低)
数组长度较大时推荐使用该方案,平均时间复杂度为O(n):
import java.util.HashSet; import java.util.Set; public class DuplicateCheck { public static void main(String[] args) { int[] input = {1, 2, 3, 4, 1}; boolean hasDuplicates = false; Set<Integer> seen = new HashSet<>(); for (int num : input) { if (!seen.add(num)) { // HashSet的add方法返回false代表元素已存在 hasDuplicates = true; break; } } } }
内容的提问来源于stack exchange,提问作者Betim
相关产品推荐
相关产品推荐

