📅  最后修改于: 2023-12-03 15:07:56.990000             🧑  作者: Mango
给定三个已经排序的数组,编写一个函数来查找它们的公共元素。如果不存在公共元素,则返回空数组。
# 输入
arr1 = [1, 2, 3, 4, 5]
arr2 = [2, 3, 4, 5, 6]
arr3 = [3, 4, 5, 6, 7]
# 输出
[4, 5]
由于三个数组都已经排序,我们可以通过遍历三个数组,比较它们当前指向的元素,来确定它们的公共元素。具体步骤如下:
i
、j
、k
分别指向三个数组的第一个元素。代码如下:
def find_common_elements(arr1, arr2, arr3):
i, j, k = 0, 0, 0 # 初始化三个指针
res = []
while i < len(arr1) and j < len(arr2) and k < len(arr3):
if arr1[i] == arr2[j] == arr3[k]: # 找到公共元素
res.append(arr1[i])
i += 1
j += 1
k += 1
else:
# 移动最小元素指针
min_val = min(arr1[i], arr2[j], arr3[k])
if arr1[i] == min_val:
i += 1
elif arr2[j] == min_val:
j += 1
else:
k += 1
return res
本题的时间复杂度为 $O(N)$,其中 $N$ 为三个数组中元素的总数。可以通过使用三个指针的方法来遍历三个数组,判断是否存在公共元素,并在 $O(1)$ 的时间内将指针向后移动。