LeetCode350. Intersection of Two Arrays II

本文深入探讨了两个数组交集的算法实现,通过实例展示了如何计算两个数组的交集,并详细解释了当输入数组已排序、大小不一或部分元素存储在磁盘上的情况下,如何优化算法。文章提供了一种基于双指针的解决方案,能够有效处理重复元素,适用于多种场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Given two arrays, write a function to compute their intersection.

Example 1:

Input: nums1 = [1,2,2,1], nums2 = [2,2]
Output: [2,2]

Example 2:

Input: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
Output: [4,9]

Note:

  • Each element in the result should appear as many times as it shows in both arrays.
  • The result can be in any order.

Follow up:

  • What if the given array is already sorted? How would you optimize your algorithm?
  • What if nums1's size is small compared to nums2's size? Which algorithm is better?
  • What if elements of nums2 are stored on disk, and the memory is limited such that you cannot load all elements into the memory at once?

思路:与上一题相比,稍微复杂一些, 需要注意在两个列表中分别存在的个数.

        可以将两个列表进行排序,然后用两个指针,同时从头开始比较,这样遇到相同元素时,就可以统计出现次数.

class Solution:
    def intersect(self, nums1, nums2):
        """
        :type nums1: List[int]
        :type nums2: List[int]
        :rtype: List[int]
        """
        nums1.sort()
        nums2.sort()
        same=[]
        a,b=0,0
        while a<len(nums1) and b<len(nums2):
            if nums1[a] == nums2[b]:
                same.append(nums1[a])
                a += 1
                b += 1
            elif nums1[a]<nums2[b]:
                a += 1
            else:
                b += 1
            
        return same

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值