两个数组的交|两个数组的交 (lintcode:intersection-of-two-arrays) (lintcode:intersection-of-two-arrays-ii)

题一:
返回两个数组的交,结果中的每个元素必须是唯一的,答案可以以任意顺序给出。

def intersection(self, nums1, nums2): # write your code here nums1 = set(nums1) nums2 = set(nums2) nums = nums1 & nums2 nums = list(nums) return nums





题二:
计算两个数组的交,每个元素出现次数得和在数组里一样,答案可以以任意顺序给出。
一个错误的方法:
def intersection(nums1, nums2): nums = [i for i in nums1 if i in nums2] return numsnums1 = [1, 2, 2, 1] nums2 = [2] print intersection(nums1, nums2)

输出应该是 [2] ,但得到得却是 [2, 2]
【两个数组的交|两个数组的交 (lintcode:intersection-of-two-arrays) (lintcode:intersection-of-two-arrays-ii)】网上经常出现这个,或思路类似的方法。


正确的方法:
def intersection(nums1, nums2): nums1, nums2 = sorted(nums1), sorted(nums2) p1 = p2 = 0 nums = [] while p1 < len(nums1) and p2 < len(nums2): if nums1[p1] < nums2[p2]: p1 += 1 elif nums1[p1] > nums2[p2]: p2 += 1 else: nums += nums1[p1], p1 += 1 p2 += 1 return nums

思路,排序,双指针。


lintcode 原题1
lintcode 原题2
正确方法的出处
20180202

    推荐阅读