/**
在一个长度为n的数组里的所有数字都在0到n-1的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,
也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。例如,如果输入长度为7的数组{2, 3, 1, 0, 2, 5, 3},
那么对应的输出是重复的数字2或者3。
*/
/*思路:
* 1.将数组排序,排序后看邻近
* 2.哈希,将下标与数值对应,在排表的过程中发现重复元素即返回
*/
/**
* 拓展:不修改数组的查找
* 在一个长度为n+1的数组里的所有数字都在1到n的范围内,所以数组中至少有一个数字是重复的。
* 请找出数组中任意一个重复的数字,但不能修改输入的数组。
* 例如,如果输入长度为8的数组{2, 3, 5, 4, 3, 2, 6, 7},那么对应的输出是重复的数字2或者3。
*/
/*思路:
* 1.创建长度为n+1的辅助数组,将原数组元素复制,如m复制到下标为m的位置-->辅助空间为O(n)
* 2.类似二分查找。将1~n分为1~m和m+1~n,如果1~m的数字数目超过m必有重复
* */
package sword;
/**
* @author PangWanjia
* @date 2021/3/16 19:17
*/
public class test03 {
//哈希,将数字放进对应的下标下,即数组下标=数组元素,找到重复的时直接结束
static int findnum(int[] nums){
for(int i = 0;i<nums.length;i++){
while(nums[i]!=i){
if(nums[nums[i]]==nums[i]){
【剑指offer】面试题3:数组中重复的数字(JAVA)
最新推荐文章于 2022-09-07 23:39:14 发布
这篇博客详细解析了如何使用Java解决《剑指Offer》面试题3,即找出数组中重复出现的数字。通过算法分析和代码实现,帮助读者理解如何在已知数组中检测并找出重复元素。
最低0.47元/天 解锁文章
6114

被折叠的 条评论
为什么被折叠?



