利用HashSet去判断第一个重复的数字
public boolean duplicate(int numbers[],int length,int [] duplication) {
if(length < 2)
return false;
Set<Integer> set = new HashSet<>();
for(int i = 0; i < length; i++){
if(set.contains(numbers[i])){
duplication[0] = numbers[i];
return true;
}
set.add(numbers[i]);
}
return false;
} 二刷新思路
class Solution {
/**
用上了 《nums 里的所有数字都在 0~n-1 的范围内》 这个条件
使得 nums数组中对应下标放的是对应相等的数字,eg:nums[1] = 1, nums[2] = 2
按照上面的做法将每个位置的数字归为,当碰到要归位的那个位置已经是正确的时候,此时就找到相同的数字了
eg: nums[1] = 5, nums[5] = 5,此时要将nums[1] = 5,归位到nums[5]中,但是nums[5]中的数字已经是正确的了
**/
public int findRepeatNumber(int[] nums) {
int left = 0;
while(left < nums.length){
if(nums[left] == left)
left++;
else if(nums[nums[left]] == nums[left])
return nums[left];
else {
int tmp = nums[nums[left]];
nums[nums[left]] = nums[left];
nums[left] = tmp;
}
}
return 0;
}
}

京公网安备 11010502036488号