📜  门|门 IT 2006 |问题 14(1)

📅  最后修改于: 2023-12-03 14:58:36.056000             🧑  作者: Mango

门 | 门 IT 2006 | 问题 14

题目描述

在一个长度为 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)。