Find the Duplicate Number
原题链接Find the Duplicate Number
给定一定大小为n+1的数组,数组中的元素只可能是1到n中的数字,包括1和n。在数组中,有一个数字重复了多次,找到这个数字。
要求不能改变源数组的值,空间复杂度为O(1),时间复杂度要小于O(n2)。
注意数组中每个元素都只能是1到n之间的数字,这提供了一个有用的信息,即
- 对于每个元素,可以用它的大小和[1: n]之间的数字比较
什么意思呢,假设数组中只有n个元素,而每个元素的大小都在[1 : n]之间,且没有重复元素。那么对于1到n中的某个值w而言,整个数组中小于等于w的元素个数恰好等于w。可以通过先将数组排序后证明
接着,n个元素的时候恰好[1 : n]各一个,现在,随机从[1 : n]中选择一个数字添加到数组中,使数组元素个数变为n+1。此时,对于某个值w而言。如果添加的数字小于等于w