找出数组中重复的数字。
在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。
示例 1:
输入:
[2, 3, 1, 0, 2, 5, 3]
输出:2 或 3
限制:
2 <= n <= 100000
class Solution {
public int findRepeatNumber(int[] nums) {
//数组 nums 里的所有数字都在 0~n-1 的范围内,不大于下标本身
//0 1 2 3 值对应自己的下标 nums[i]==i
//0 1 2 100 错误
//2 3 1 0 属于位置不对,应该重新按照下标放置位置
//判断元素重复的标准nums[i]==nums[nums[i]]
if(nums==null || nums.length==0) return -1;
int index=0;
while(index<nums.length){
if(nums[index]==index){
index++;
continue;
}
if(nums[index]==nums[nums[index]]){
return nums[index];
}
swap(nums,index,nums[index]);//交换元素
}
return -1;
}
void swap(int[] nums,int indexA,int indexB ){
int temp=nums[indexA];
nums[indexA]=nums[indexB];
nums[indexB]=temp;
}
}
方法:使用将元素摆放到数组对应的下标位置,如果该位置已经有元素证明重复
该博客介绍了一种解决算法问题的方法,即在给定的数组中找出重复的数字。数组长度为n,且所有数字都在0到n-1之间。通过将元素放置到其下标对应的位置,当遇到元素与其下标相等的情况时继续检查,若不相等则交换,直至找到重复的数字。示例展示了如何在给定数组[2,3,1,0,2,5,3]中找到重复的数字2或3。算法复杂度较低,适用于范围较小的数组。
4340

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



