方法一:
思想:
1. 比较nums1和nums2的数组长度,得到长度较短的数组(使用集合去重)和长度教程的数组
2.逐一访问较短数组s_nums元素,如果该元素存在于较长数组l_nums中,则将该元素放入交集数组中nums
class Solution:
def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
nums = []
l1, l2= len(nums1), len(nums2)
if l1 != l2:
if l1 > l2:
s_nums = list(set(nums2))
l_nums = nums1
else:
s_nums = list(set(nums1))
l_nums = nums2
else:
s_nums = list(set(nums1))
l_nums = nums2
for i in s_nums:
if i in l_nums:
nums.append(i)
return nums
方法二:排序+双指针
思想:
1. 将两个数组分别排序
2.使用index1和index2两个指针从0开始分别逐一访问nums1和nums2的数组元素,直到超出两个数组的范围
3.如果两个元素相等,如果是第一个相等的元素,则将该元素放入交集中,并将两指针都向右移动一位;如果不是第一个相等的元素,则需要判断该元素是否在交集中存在,不存在则加入,否则不加入,并将两指针都向右移动一位
4.如果其中一个元素小于另一个元素,则将指向较小元素的指针向右移动一位
class Solution:
def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
#排序+双指针
inter_nums = []
l1 ,l2 = len(nums1), len(nums2)
nums1.sort()
nums2.sort()
index1 ,index2 = 0, 0
while index1 < l1 and index2 < l2:
if nums1[index1] == nums2[index2]:
if not inter_nums or nums1[index1] != inter_nums[-1]:
inter_nums.append(nums1[index1])
index1 += 1
index2 += 1
elif nums1[index1] < nums2[index2]:
index1 += 1
else:
index2 += 1
return inter_nums
重点:两个有序数组可以使用双指针获得两个数组的交集