leetcode初级算法练习-两个数组的交集 II

目录

  1. 前言
  2. 总体思路
  3. 实现代码 

前言

leetcode初级算法练习-两个数组的交集 II


一、总体思路

1、常规方法

将两个数组分别进行排序处理,并设定两个指针分别指向排序后的对应数组的首位元素,然后比较两个指针所指向元素的大小,如果相等,则将此元素存入事先准备的空白数组中,如果不相等,小元素对应的指针则后移一位,以此类推,直至指向其中任一数组的尾部。

2、哈希表

首先遍历第一个数组,并在哈希表中记录第一个数组中的每个数字以及对应出现的次数,然后遍历第二个数组,对于第二个数组中的每个数字,如果在哈希表中存在这个数字,则将该数字添加到答案,并减少哈希表中该数字出现的次数。

为了降低空间复杂度,首先遍历较短的数组并在哈希表中记录每个数字以及对应出现的次数,然后遍历较长的数组得到交集。

       哈希表方法转载出处:

       作者:LeetCode-Solution
       链接:https://leetcode-cn.com/problems/intersection-of-two-arrays-ii/solution/liang-ge-shu-zu-de-jiao-ji-ii-by-leetcode-solution/
       来源:力扣(LeetCode)

二、实现代码

1、常规方法代码

def intersect(nums1, nums2):
    nums1 = sorted(nums1)
    nums2 = sorted(nums2)
    n1 = len(nums1)
    n2 = len(nums2)
    ans = []
    i = 0
    j = 0
    while n1 > i and n2 > j:
        n_1 = nums1[i]
        n_2 = nums2[j]
        if n_1 < n_2:
            i = i + 1
        elif n_1 > n_2:
            j = j + 1
        else:
            i += 1
            j += 1
            ans.append(n_1)
    return ans

2、哈希表

import collections
class Solution:
    def intersect(self, nums1: List[int], nums2: List[int]) -> List[int]:
        if len(nums1)>len(nums2):
            return self.intersect(nums2, nums1)
        
        m = collections.Counter()
        for num in nums1:
            m[num] += 1
        
        intersection = list()
        for num in nums2:
            if m.get(num,0) > 0:
                intersection.append(num)
                m[num] -= 1
                if m[num] == 0:
                    m.pop(num)
        return intersection

三、collections --- 容器数据类型

https://docs.python.org/zh-cn/3/library/collections.html

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值