https://leetcode.com/problems/intersection-of-two-arrays/#/description
先将两个list中的重复元素去掉,即使用set(list)去重,再转化为list即可,这时list中的元素都是没有重复的
class Solution(object):
def intersection(self, nums1, nums2):
"""
:type nums1: List[int]
:type nums2: List[int]
:rtype: List[int]
"""
l=[]
nums1 = list(set(nums1))
nums2 = list(set(nums2))
for i in range(len(nums1)):
if nums1[i] in nums2:
l.append(nums1[i])
return l
直接使用set的&运算,得到相同的元素,然后转为list
class Solution(object):
def intersection(self, nums1, nums2):
"""
:type nums1: List[int]
:type nums2: List[int]
:rtype: List[int]
"""
nums1=set(nums1)
nums2=set(nums2)
return list(nums1&nums2)
一直在考虑设立flag标记已经要返回的元素,使得返回的元素中没有重复的,但是下面这种方法非常简单
class Solution(object):
def intersection(self, nums1, nums2):
"""
:type nums1: List[int]
:type nums2: List[int]
:rtype: List[int]
"""
res = []
for i in nums1:
if i not in res and i in nums2:
res.append(i)
return res
这种使用map的方法开始的时候想了,但是没有想到的是一旦发现nums2中的元素在map中之后 ,直接将相应map[j]置为零这种处理重复的方法,还在想怎么-1
class Solution(object):
def intersection(self, nums1, nums2):
"""
:type nums1: List[int]
:type nums2: List[int]
:rtype: List[int]
"""
res = []
map = {}
for i in nums1:
map[i] = map[i]+1 if i in map else 1
for j in nums2:
if j in map and map[j] > 0:
res.append(j)
map[j] = 0
return res
其中这句非常厉害好用~
for i in nums1:
map[i] = map[i]+1 if i in map else 1