zoukankan      html  css  js  c++  java
  • 排序题目之两个数组的交集

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

    示例 1:

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

    示例 2:

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

    说明:

    • 输出结果中的每个元素一定是唯一的。

    • 我们可以不考虑输出结果的顺序。

    首先说一下我自己的(菜鸡)思路:我先是想先去重第第一个数组(nums1),然后循环判断值是否在nums2中,有的话,添加新的列表中。

    代码实现如下例1:

    1 class Solution:
    2     def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
    3         num1 = set(nums1)
    4         num = [i for i in num1 if i in nums2]
    5         return num

    还有一种类似的方法例2:

     1 class Solution:
     2     def set_intersection(self, set1, set2):
     3         return [x for x in set1 if x in set2]
     4         
     5     def intersection(self, nums1, nums2):
     6         """
     7         :type nums1: List[int]
     8         :type nums2: List[int]
     9         :rtype: List[int]
    10         """  
    11         set1 = set(nums1)
    12         set2 = set(nums2)
    13         
    14         if len(set1) < len(set2):
    15             return self.set_intersection(set1, set2)
    16         else:
    17             return self.set_intersection(set2, set1)

    但是他的运行时间:

    比我自己做快了24ms,值得深思问题,复杂度分析,

    • 时间复杂度:O(m+n)O(m+n),其中 n 和 m 是数组的长度。O(n)O(n) 的时间用于转换 nums1 在集合中,O(m)O(m) 的时间用于转换 nums2 到集合中,并且平均情况下,集合的操作为 O(1)O(1))

    • 空间复杂度:O(m+n)O(m+n),最坏的情况是数组中的所有元素都不同。

    对于无所不能的python 来说,内置了交集方法,看看下面的操作例3:

    class Solution:
       def intersection(self, nums1, nums2):
           """
          :type nums1: List[int]
          :type nums2: List[int]
          :rtype: List[int]
          """  
           set1 = set(nums1)
           set2 = set(nums2)
           return list(set2 & set1)

    怎样是不是有点无语,看看他的运行时间,虽然运行速度比上面例2慢了一些,但是代码的简洁了很多,各有优缺点。

    复杂度分析:

    • 时间复杂度:一般情况下是 O(m+n)O(m+n),最坏情况下是 O(m imes n)O(m×n)。

    • 空间复杂度:最坏的情况是 O(m+n)O(m+n),当数组中的元素全部不一样时。

    只能说还是太菜。。。。。。。。

    初学者

    分享及成功,你的报应就是我,记得素质三连!

    来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/intersection-of-two-arrays

  • 相关阅读:
    UVA 1515 Pool construction 最大流跑最小割
    BZOJ 1060: [ZJOI2007]时态同步 树形DP
    Codeforces Round #282 (Div. 1)B. Obsessive String KMP+DP
    BZOJ 4027: [HEOI2015]兔子与樱花 贪心
    BZOJ 2435: [Noi2011]道路修建 dfs搜图
    HDU 5297 Y sequence 容斥/迭代
    HDU 5296 Annoying problem dfs序 lca set
    HDU 5289 Assignment RMQ
    343D/Codeforces Round #200 (Div. 1) D. Water Tree dfs序+数据结构
    php mysqli扩展库之预处理操作
  • 原文地址:https://www.cnblogs.com/xbhog/p/11746087.html
Copyright © 2011-2022 走看看