用HashMap的解法就不多说了
另一种解法 原地交换 空间复杂度为1
public int findRepeatNumber(int[] nums) {
/** 如果该数组没有重复的数时,每一个索引都对应着唯一的那个数
* 但是现在一个数对应多个索引
* 通过交换,使索引和数值一一对应,做到类似于字典的作用*/
int i = 0;
while (i < nums.length){
/** 如果当前索引已经和数值对应上了,就往当前后移一位*/
if (nums[i] == i){//当前位置的数值等于当前位置的索引
i++;
continue;
}
/** 如果当前位置的数值 在该数值位置的索引上已经存在了*/
if (nums[i] == nums[nums[i]]){//当前位置的数值 等于在该数值位置上的数值
return nums[i];//直接返回该数值
}
/** 将当前数值放到相对应的索引位置上去*/
int temp = nums[i];
nums[i] = nums[temp];
nums[temp] = temp;
}
return -1;
}

这篇博客介绍了如何使用原地交换的方法解决数组中存在重复数字的问题,通过不断交换,使得索引与数值一一对应,实现空间复杂度为1的解决方案。主要涉及数组操作和逻辑判断技巧。
311

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



