网站首页 > 精选教程 正文
方法一:哈希表法(时间复杂度 O(n),空间复杂度 O(n))
核心思想
利用 HashSet 的去重特性,遍历数组时若元素已存在于集合中,则为重复数字。
代码示例
public int findDuplicate(int[] nums) {
if (nums == null || nums.length == 0) return -1;
Set<Integer> set = new HashSet<>();
for (int num : nums) {
if (num < 0 || num >= nums.length) return -1; // 输入合法性检查
if (!set.add(num)) return num;
}
return -1;
}
优缺点
- 优点:逻辑简单,适合任意范围的数组。
- 缺点:需要额外 O(n) 空间 。
方法二:排序法(时间复杂度 O(n log n),空间复杂度 O(1))
核心思想
先排序数组,重复元素必相邻。遍历时比较相邻元素即可。
代码示例
public int findDuplicate(int[] nums) {
if (nums == null || nums.length == 0) return -1;
Arrays.sort(nums);
for (int i = 1; i < nums.length; i++) {
if (nums[i] == nums[i-1]) return nums[i];
}
return -1;
}
适用场景
- 允许修改原数组且对空间复杂度敏感的场景
猜你喜欢
- 2025-05-28 10亿数据量只需要100MB内存,redis的位存储为什么这么牛?
- 2025-05-28 Java 如何在 Array 和 List 之间进行转换
- 2025-05-28 Java并发工具:CopyOnWriteArrayList
- 2025-05-28 Java中判断数组是否包含特定值的方法
- 2025-05-28 【Java数组终极指南】从青铜到王者:一文解锁高效数据处理秘籍
- 2025-05-28 java数组的初始化及遍历
- 2025-05-28 Java集合与数组互转终极指南:从基础到高级应用
- 2025-05-28 Java数组作为方法参数:值传递的真相与最佳实践
- 2025-05-28 Java数组详解
你 发表评论:
欢迎- 08-06AIDA64发布7.70正式版:首次支持PCIe 7.0,提前支持Zen 6
- 08-06C#语言编程案例-颜色码数制转换
- 08-06渐变配色工具——webgradients
- 08-06CSS颜色值的转换
- 08-06KDE Plasma 6.4桌面环境发布:增强多桌面布局、优化界面等
- 08-06生成引人注目色彩的小型Javascript脚本——randomColor
- 08-06CSS入门指南:核心概念与实用技巧
- 08-06软网推荐:自定软件窗口背景色保护眼睛
- 最近发表
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)