📜  在整数数组中找到第一个重复元素(1)

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

在整数数组中找到第一个重复元素

在开发过程中,经常需要在整数数组中查找第一个重复元素。这个问题可以用多种方法解决,接下来将介绍其中的两种方法。

方法一

使用哈希表

算法思路:

  1. 创建一个空哈希表。
  2. 依次遍历整数数组中的每一个元素。
  3. 如果该元素在哈希表中已经存在,则返回该元素。
  4. 如果该元素在哈希表中不存在,则将该元素添加到哈希表中。
  5. 如果整个数组遍历完毕,没有找到重复元素,则返回-1。

Python代码实现:

def find_first_duplicate(arr):
    hash_map = {}
    for num in arr:
        if num in hash_map:
            return num
        hash_map[num] = 1
    return -1

时间复杂度:O(n)

空间复杂度:O(n)

方法二

使用快慢指针

算法思路:

  1. 对整数数组进行排序。
  2. 定义两个指针:快指针和慢指针,初始值都为0。
  3. 快指针向后移动,如果快指针所指元素和慢指针所指元素相同,则返回该元素。
  4. 如果整个数组遍历完毕,没有找到重复元素,则返回-1。

Python代码实现:

def find_first_duplicate(arr):
    arr.sort()
    slow = 0
    fast = 1
    while fast < len(arr):
        if arr[slow] == arr[fast]:
            return arr[slow]
        slow += 1
        fast += 1
    return -1

时间复杂度:O(nlogn)

空间复杂度:O(1)

总结

方法一使用了哈希表来快速查找重复元素,时间复杂度为线性的O(n),但需要使用额外的哈希表来存储元素,空间复杂度也为O(n)。方法二则没有使用额外的空间,时间复杂度为O(nlogn),不如方法一优秀,不过对于小数据量的数组,方法二会更快。两种方法各有优劣,可以根据实际情况选择使用。