"剑指offer面试题03. 数组中重复的数字 Java解题总结"

需积分: 0 0 下载量 13 浏览量 更新于2023-12-28 收藏 2MB PDF 举报
《剑指offer》是一本经典的面试指南,里面涵盖了大量的编程题目和解答方法。本文将就《剑指offer》书中的题目进行总结和解答,希望能为大家在找工作时提供一些帮助。下面将对书中的一个题目进行详细的解答。 题目03. 数组中重复的数字 题目描述:找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。 示例 1: 输入:[2, 3, 1, 0, 2, 5, 3] 输出:2 或 3 解题思路: 这道题要求我们找出数组中任意一个重复的数字,所以我们可以利用不同的方法来解答。下面将介绍三种常见的解题方法。 方法一:哈希集合 利用set判断是否存在,如果存在则返回这个数。 时间复杂度:O(n) 空间复杂度:O(n) 方法二:排序后进行比较 先将数组排序,然后判断相邻元素是否有重复。 时间复杂度:O(nlog(n)) 空间复杂度:O(1) 方法三:额外数组做索引 用一个数组与原数组值对应,当大于1时则返回。 时间复杂度:O(n) 空间复杂度:O(n) 代码示例(Java): public int findRepeatNumber(int[] nums) { Set<Integer> set = new HashSet<>(); for (int num : nums) { if (set.contains(num)) { return num; } set.add(num); } return -1; } 结论: 通过以上的分析,我们了解了如何利用哈希集合、排序以及额外数组作索引三种方法来解决这道题目。在不同的场景下,我们可以根据题目的要求选择适合的方法来解决问题。希望这篇总结能够帮助大家更好地理解并掌握这道题目的解答方法。 附上我的剑指offer总结题解的GitHub地址:https://github.com/WangC/剑指offer总结题解 希望大家都能在面试中取得好成绩,顺利找到自己满意的工作。祝大家都能早日实现自己的职业目标!
2022-08-03 上传