2032. 至少在两个数组中出现的值 - 力扣(LeetCode)
这个问题的要求是找出至少在两个数组中出现的不同元素。可以使用集合(set)来帮助我们高效地完成这个任务。基本思路是:遍历每个数组,找出每个数组中出现的元素,并通过集合的交集操作来筛选出至少出现在两个数组中的元素。
具体步骤如下:
-
使用集合来存储每个数组中的元素。
-
通过3个交集的元素计数,找到在至少两个数组中出现的元素。
-
返回这些元素。
class Solution:
def twoOutOfThree(self, nums1: List[int], nums2: List[int], nums3: List[int]) -> List[int]:
# 将每个数组转换为集合,去除重复元素
set1 = list(set(nums1))
set2 = list(set(nums2))
set3 = list(set(nums3))
out = Counter(set1+set2+set3)
return [k for k,v in out.items() if v >=2]
代码解析:
-
转换为集合:通过
set(nums1)
、set(nums2)
和set(nums3)
来去重每个输入的数组。你使用了list(set(nums1))
等来将这些集合转换回列表,尽管这一步可以省略,因为接下来用到的Counter
本身也可以直接处理集合。 -
合并并计数:使用
Counter(set1 + set2 + set3)
来计算合并后的元素的出现次数。这个方法会给每个元素一个计数值,表示它在所有三个数组中的出现次数。 -
过滤出现次数:通过
[k for k, v in out.items() if v >= 2]
来筛选出出现次数大于等于 2 的元素,即至少在两个数组中出现过的元素。
示例:
nums1 = [1, 1, 3, 2]
nums2 = [3, 1]
nums3 = [2, 3]
print(twoOutOfThree(nums1, nums2, nums3)) # 输出: [1, 2, 3]
这个实现确保了返回的元素没有重复,并且符合至少出现在两个数组中的要求。