/**
633 · Find the Duplicate Number
Algorithms
Hard
Accepted Rate
49%
DescriptionSolutionNotesDiscussLeaderboard
Description
Given an array nums containing n + 1 integers where each integer is between 1 and n (inclusive), guarantee that at least one duplicate number must exist. Assume that there is only one duplicate number, find the duplicate one.
You must not modify the array (assume the array is read only).
You must use only constant, O(1) extra space.
Your runtime complexity should be less than O(n^2).
There is only one duplicate number in the array, but it could be repeated more than once.
Example
Example 1:
Input:
[5,5,4,3,2,1]
Output:
5
Example 2:
Input:
[5,4,4,3,2,1]
Output:
4
Tags
Company
Bloomberg
https://blog.csdn.net/qq_46105170/article/details/105575357
https://www.lintcode.com/problem/633/
*/
应该是链表求环的方法,但是具体的原理我不明白,有懂的人希望指点下。
/**
* @param nums: an array containing n + 1 integers which is between 1 and n
* @return: the duplicate one
*/
func findDuplicate (nums []int) int {
// write your code here
var slow, fast int = 0, 0
for {
slow = nums[slow]
fast = nums[nums[fast]]
if slow == fast {
break
}
}
var p int = 0
for {
if p == slow {
break
}
p = nums[p]
slow = nums[slow]
}
return p
}