力扣 350. 两个数组的交集 II (难度:简单)
题目:给定两个数组,编写一个函数来计算它们的交集。
示例 1:
输入:nums1 = [1,2,2,1], nums2 = [2,2] 输出:[2,2]
示例 2:
输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4] 输出:[4,9]
说明:
- 输出结果中每个元素出现的次数,应与元素在两个数组中出现次数的最小值一致。
- 我们可以不考虑输出结果的顺序。
解答:
- 起初想的方法是用两个哈希表,看了官方题解,学到了,可以只用一个哈希表
1 class Solution: 2 def intersect(self, nums1: List[int], nums2: List[int]) -> List[int]: 3 if len(nums1) > len(nums2): 4 return self.intersect(nums2, nums1) 5 6 cnt = collections.Counter(nums1) 7 8 result = [] 9 for num in nums2: 10 if cnt.get(num, -1) > 0: 11 result.append(num) 12 cnt[num] -= 1 13 14 return result
- 更加 pythonic 的解法,Python 大法好!
1 class Solution: 2 def intersect(self, nums1: List[int], nums2: List[int]) -> List[int]: 3 cnt1 = collections.Counter(nums1) 4 cnt2 = collections.Counter(nums2) 5 result = cnt1 & cnt2 6 return list(result.elements())