题目:
给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。
示例 1:
输入: [1,3,4,2,2]
输出: 2
思路:
题目不难,难在限制条件
通过求环的方法来找到这个重复的数。
方法使用查找环的第一个节点
代码:
class Solution {
public int findDuplicate(int[] nums) {
if(nums.length==0) return -1;
int slow = 0,fast = 0;
while(slow!=nums[fast]){
slow = nums[slow];
fast = nums[nums[fast]];
}
slow = nums[slow];
fast = 0;
while(slow!=fast){
slow = nums[slow];
fast = nums[fast];
}
return slow;
}
}