一、题目
给你两个整数数组 nums1 和 nums2 ,请你以数组形式返回两数组的交集。返回结果中每个元素出现的次数,应与元素在两个数组中都出现的次数一致(如果出现次数不一致,则考虑取较小值)。可以不考虑输出结果的顺序。
示例 1:
输入:nums1 = [1,2,2,1], nums2 = [2,2]
输出:[2,2]
示例 2:
输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出:[4,9]
作者:力扣 (LeetCode) 链接:leetcode.cn/leetbook/re… 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
二、思考
排序 + 双指针
- 根据题意,当前数组不需要去重,如果两个数组有相同的值,都可以添加在新数组里
- 首先通过sort为nums1,nums2排序
- 其次:定义新的数组,定义nums1和nums2的长度,定义两个列表的指针firstIndex, secondIndex
- 判断条件依然是当firstIndex 小于 len1 和 secondIndex 小于 len2
- 这里判断三种情况
- 第一种是相等的情况,如果相等,则添加进数组,同时双指针都相加1
- 第二种是nums1[firstIndex] 小于 nums2[secondIndex]的情况,说明当前nums1的值小,则可以继续下一个值firstIndex加1
- 第三种是nums1[firstIndex] 大于 nums2[secondIndex]的情况,说明当前nums1的值达,则可以secondIndex加1
- 最后返回新的list
三、代码
排序 + 双指针
class Solution:
def intersect(self, nums1: List[int], nums2: List[int]) -> List[int]:
"""
根据题意,当前数组不需要去重,如果两个数组有相同的值,都可以添加在新数组里
首先通过sort为nums1,nums2排序
其次:定义新的数组,定义nums1和nums2的长度,定义两个列表的指针firstIndex, secondIndex
判断条件依然是当firstIndex 小于 len1 和 secondIndex 小于 len2
这里判断三种情况
第一种是相等的情况,如果相等,则添加进数组,同时双指针都相加1
第二种是nums1[firstIndex] 小于 nums2[secondIndex]的情况,说明当前nums1的值小,则可以继续下一个值firstIndex加1
第三种是nums1[firstIndex] 大于 nums2[secondIndex]的情况,说明当前nums1的值达,则可以secondIndex加1
最后返回新的list
:param nums1:
:param nums2:
:return:
"""
nums1.sort()
nums2.sort()
list1, len1, len2, firstIndex, secondIndex = list(), len(nums1), len(nums2), 0, 0
while firstIndex < len1 and secondIndex < len2:
if nums1[firstIndex] == nums2[secondIndex]:
list1.append(nums1[firstIndex])
firstIndex += 1
secondIndex += 1
elif nums1[firstIndex] < nums2[secondIndex]:
firstIndex += 1
else:
secondIndex += 1
return list1
Solution().intersect(nums1, nums2)