📌  相关文章
📜  打印 Q 查询的值范围 [A, B] 内给定数组中的所有重复元素(1)

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

打印 Q 查询的值范围 [A, B] 内给定数组中的所有重复元素

在面试过程中,面试官通常会给出一个数组和一个查询区间,要求求出在区间内重复出现的元素。这种问题通常可以通过利用哈希表或者排序来解决。下面分别介绍这两种解决方法。

哈希表

哈希表是一种能够快速查找某个键值对应的值的数据结构。在这个问题中,我们可以使用一个哈希表来存储数组中每个元素的出现次数。具体步骤如下:

  1. 遍历数组,并将每个元素加入哈希表中。
  2. 遍历查询区间 [A, B],并将出现次数大于 1 的元素加入结果集中。

下面是使用 Python 实现以上算法的代码片段:

from collections import defaultdict

def find_duplicates(A, Q):
    freq = defaultdict(int)
    for x in A:
        freq[x] += 1
    res = set()
    for x in A[Q[0]:Q[1]+1]:
        if freq[x] > 1:
            res.add(x)
    return sorted(list(res))

A = [1,2,3,2,5,6,7,7,8,9,9]
Q = (2, 7)
print(find_duplicates(A, Q))  # [2, 7, 9]
排序

如果输入数组是无序的,那么我们需要先将其排序。在排序后的数组中,出现次数大于 1 的元素必然是相邻的。因此我们只需要遍历查询区间中相邻的元素,并将相等的元素加入结果集中。

下面是使用 Python 实现以上算法的代码片段:

def find_duplicates(A, Q):
    A = sorted(A[Q[0]:Q[1]+1])
    res = []
    for i in range(1, len(A)):
        if A[i] == A[i-1]:
            res.append(A[i])
    return res

A = [1,2,3,2,5,6,7,7,8,9,9]
Q = (2, 7)
print(find_duplicates(A, Q))  # [2, 7, 9]

总的来说,这个问题的解决方法主要是通过利用哈希表或排序来实现。在实际面试中,我们需要根据具体情况来选择合适的方法。