LC 两个数组的交集
给定两个数组,编写一个函数来计算它们的交集
说明:
输出结果中每个元素出现的次数,应与元素在两个数组中出现次数的最小值一致。
可以不考虑输出结果的顺序。
1
字典记录次数,取次数小的构建新列表。
class Solution:
def intersect(self, nums1: List[int], nums2: List[int]) -> List[int]:
dic1 = dict({})
dic2 = dict({})
for i in nums1:
if i in dic1:
dic1[i] = dic1[i] + 1
else:
dic1[i] = 1
for i in nums2:
if i in dic2:
dic2[i] = dic2[i] + 1
else:
dic2[i] = 1
ints = list(set(nums1) & set(nums2))
length = len(ints)
for i in range(length):
for j in range(min(dic1[ints[i]],dic2[ints[i]])-1):
ints.append(ints[i])
return ints
2 改进
直接在数组2上做修改
def intersect(self, nums1: List[int], nums2: List[int]) -> List[int]:
dic = dict({})
for i in nums1:
if i in dic:
dic[i] = dic[i] + 1
else:
dic[i] = 1
length = len(nums2)
j = 0
while j < length:
if nums2[j] in dic:
dic[nums2[j]] = dic[nums2[j]] - 1
if dic[nums2[j]] < 0:
del nums2[j]
length = length - 1
else:
j = j + 1
else:
del nums2[j]
length = length - 1
return nums2