题目描述
解题思路
参照:https://leetcode.cn/problems/find-the-duplicate-number/solution/287xun-zhao-zhong-fu-shu-by-kirsche/
本题就是环形链表II的数组抽象出来的,我们要判断哪个数字重复,那么我们类比为链表,此时
重复的数组可以构成环,所以可以类比环形链表来求出这个环的入口。
注意公式在环形链表II中推导过,此外题目给的数字是[1,n]所以不会一开始就进入环,所以不会死循环。
难得是类比过去。
public int findDuplicate(int[] nums) {int slow = nums[0], fast = nums[nums[0]];// 进入环while (slow != fast) {slow = nums[slow];fast = nums[nums[fast]];}// 找到环的入口int pre = 0;int cur = slow;while (pre != cur) {pre = nums[pre];cur = nums[cur];}return pre;}
