📅  最后修改于: 2023-12-03 14:58:36.056000             🧑  作者: Mango
在一个长度为 n 的整数数组中,返回任意一个重复元素的下标,若不存在重复元素则返回 -1。要求时间复杂度为 O(n),空间复杂度为 O(1)。
例如,给定数组 [2, 3, 1, 0, 2, 5, 3],返回 4 或 5。
使用哈希表可以很方便地解决此题,但一般会占用额外空间,不符合要求的空间复杂度。
可以通过数组下标来模拟哈希表,将数字 i 放在下标为 i 的位置。遍历整个数组,当遇到数字 i 时,如果下标为 i 的位置已经有数字 i,则说明存在重复元素,返回 i。
如果不存在重复元素,则返回 -1。
def find_duplicate(nums):
n = len(nums)
for i in range(n):
index = nums[i] % n
if nums[index] >= n:
return index
nums[index] += n
return -1
时间复杂度为 O(n),空间复杂度为 O(1)。