【leetcode初级】6-两个数组的交集

2018-07-22  本文已影响31人  小流

例如:
给定 nums1 = [1, 2, 2, 1], nums2 = [2, 2], 返回 [2, 2].
注意:
输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。 我们可以不考虑输出结果的顺序。
跟进:
如果给定的数组已经排好序呢?你将如何优化你的算法?
如果 nums1 的大小比 nums2 小很多,哪种方法更优?
如果nums2的元素存储在磁盘上,内存是有限的,你不能一次加载所有的元素到内存中,你该怎么办?

class Solution(object):
    def intersect(self, nums1, nums2):
        """
        :type nums1: List[int]
        :type nums2: List[int]
        :rtype: List[int]
        """
        intersection = []
        nums2_dict = {}
        for num in nums2:
            if num not in nums2_dict.keys():
                nums2_dict[num] = 1
            else:
                nums2_dict[num] += 1
        for num in nums1:
            if num in nums2_dict.keys() and nums2_dict[num] != 0:
                intersection.append(num)
                nums2_dict[num] -= 1
        return intersection
class Solution(object):
    def intersect(self, nums1, nums2):
        """
        :type nums1: List[int]
        :type nums2: List[int]
        :rtype: List[int]
        """
        nums1.sort()
        nums2.sort()
        intersection = []
        i = 0
        j = 0
        while i < len(nums1) and j < len(nums2):
            if nums1[i] == nums2[j]:
                intersection.append(nums1[i])
                i += 1
                j += 1
            elif nums1[i] < nums2[j]:
                i += 1
            else:
                j += 1
        return intersection

看提交记录应该有更快的方法,待思考补充。

上一篇 下一篇

猜你喜欢

热点阅读