题目描述
给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。
示例
示例1:
输入: [1,3,4,2,2]
输出: 2
示例2:
输入: [3,1,3,4,2]
输出: 3
- 不能更改原数组(假设数组是只读的)。
- 只能使用额外的 O(1) 的空间。
- 时间复杂度小于 O(n2) 。
- 数组中只有一个重复的数字,但它可能不止重复出现一次
快慢指针
若是没有规定只能使用O(1)的时间那么这题很容易,使用哈希表可以完美解决,且最坏时间复杂度仅为O(n)。但为了满足题目的要求那就只能另寻它法了。
仔细看了一下题目,发现题目给的数组很特殊。它只有n+1个数,但是包括了1~n的所有整数。有经验的同学可能看出来了,这种数组是可以模拟链表的。把数组内的元素当做下一个元素的坐标,也就是说数组内的元素相当于next指针。如示例1中的数组就可以模拟如下链表:
上图中由于下标2->下标4,下标3和下标4均指