📅  最后修改于: 2023-12-03 14:55:47.106000             🧑  作者: Mango
给定两个数组 nums1
和 nums2
,编写一个函数来检查 nums1
中的所有元素是否可以从 nums2
中组合得到,且每个组合仅包含 nums2
中的两个元素。
def check_concatenation(nums1: List[int], nums2: List[int]) -> bool:
pass
nums1
:一个整数类型的列表,不含重复元素nums2
:一个整数类型的列表,含有重复元素True
表示可以组合,False
表示不可以组合。assert check_concatenation([1, 2, 3, 4, 5], [2, 3, 4, 5, 6, 7])
assert check_concatenation([1, 1, 2, 3], [1, 1, 1, 2, 2, 3, 3, 3])
assert not check_concatenation([1, 2, 3, 4], [4, 3, 2, 1])
遍历 nums1
中的所有元素,对于每个元素 x
,在 nums2
中搜索是否存在形如 (x, y)
的元组,其中 y
是 nums2
中的元素。如果存在,说明可以从 nums2
中组合得到 x
。
对于每个元素在 nums2
中的搜索使用一个哈希表实现,时间复杂度为 $O(n)$。
from typing import List
def check_concatenation(nums1: List[int], nums2: List[int]) -> bool:
pairs = {}
for n in nums2:
if n not in pairs:
pairs[n] = set()
for m in nums2:
pairs[n].add((n, m))
for n in nums1:
found = False
if n in pairs:
for pair in pairs[n]:
if pair[0] == n and pair[1] in nums2:
found = True
break
if not found:
return False
return True
nums2
的长度。