📅  最后修改于: 2023-12-03 14:54:27.248000             🧑  作者: Mango
在面试过程中,面试官通常会给出一个数组和一个查询区间,要求求出在区间内重复出现的元素。这种问题通常可以通过利用哈希表或者排序来解决。下面分别介绍这两种解决方法。
哈希表是一种能够快速查找某个键值对应的值的数据结构。在这个问题中,我们可以使用一个哈希表来存储数组中每个元素的出现次数。具体步骤如下:
下面是使用 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]
总的来说,这个问题的解决方法主要是通过利用哈希表或排序来实现。在实际面试中,我们需要根据具体情况来选择合适的方法。