zoukankan      html  css  js  c++  java
  • leetcode348&350之计算两个数组的交集

    349、给定两个数组,编写一个函数来计算它们的交集。

    示例 1:

    输入:nums1 = [1,2,2,1], nums2 = [2,2]
    输出:[2]
    

    示例 2:

    输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
    输出:[9,4]

    说明:

    • 输出结果中的每个元素一定是唯一的。
    • 我们可以不考虑输出结果的顺序。
     
    350、给定两个数组,编写一个函数来计算它们的交集。

    示例 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
    代码实现:
     1 from collections import Counter
     2 
     3 
     4 def instersection(nums1, nums2):
     5     '''
     6     计算两个数组的交集
     7     :param nums1:
     8     :param nums2:
     9     :return:
    10     '''
    11     return list(set(nums1) & set(nums2))
    12 
    13 
    14 print("------测试intersection()--------")
    15 nums1 = [4, 9, 5]
    16 nums2 = [9, 4, 9, 8, 4]
    17 res = instersection(nums1, nums2)
    18 print(res)
    19 
    20 
    21 def intersect(nums1, nums2):
    22     res = []
    23     for i in nums1:
    24         if i in nums2:
    25             nums2.remove(i)
    26             res.append(i)
    27     return res
    28 
    29 
    30 print("------测试intersect()-------")
    31 nums1 = [4, 9, 5]
    32 nums2 = [9, 4, 9, 8, 4]
    33 res = intersect(nums1, nums2)
    34 print("res=", res)
    35 
    36 
    37 def intersect1(nums1, nums2):
    38     res = {}
    39     for num in nums1:
    40         if res.get(num) == None:
    41             res[num] = 1
    42         else:
    43             res[num] += 1
    44     print(res)
    45 
    46     result = []
    47     for num in nums2:
    48         if num in res and res[num] != 0:
    49             result.append(num)
    50             res[num] -= 1
    51         else:
    52             continue
    53     return result
    54 
    55 
    56 print("------测试intersect1()-------")
    57 nums1 = [4, 9, 5]
    58 nums2 = [9, 4, 9, 8, 4]
    59 result = intersect1(nums1, nums2)
    60 print("result=", result)

    输出:

    ------测试intersection()--------
    [9, 4]
    ------测试intersect()-------
    res= [4, 9]
    ------测试intersect1()-------
    {4: 1, 9: 1, 5: 1}
    result= [9, 4]

    总结:349考虑重复元素,当元素重复出现时,只输出一个就行了,借助set很容易实现。return list(set(nums1)&set(nums2))。set间的&表示两集和求交集

    350当元素重复时,输出结果元素出现次数应与每个元素在两列表中出现的最低次数一致。代码中采用两种方法来实现

    新的知识点:

    collections.Counter统计迭代器中元素个数,可以将Counter转为dict,遍历dict和hash表空间复杂度为O(1),遍历列表空间复杂度为O(N)

  • 相关阅读:
    TIOBE 2011年5月编程语言排行榜:C#和ObjectiveC上升趋势不减 狼人:
    20款绝佳的HTML5应用程序示例 狼人:
    为什么开发人员不能估算时间? 狼人:
    4款基于Django框架的开源软件推荐 狼人:
    jQuery 1.6正式版发布 狼人:
    设计者更喜欢什么操作系统 狼人:
    网络结点流网络浅析 By ACReaper
    效果实现SWFUpload在JQueryUI的Dialog中无法实现上传功能
    响应中断向量美妙的微机原理2013/5/2(2)
    内存图片IOS app启动动画的实现
  • 原文地址:https://www.cnblogs.com/rounie/p/13494886.html
Copyright © 2011-2022 走看看