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

说明:

  • 输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。
  • 我们可以不考虑输出结果的顺序
  1. def binarySearch(nums, target):
  2. '''
  3. 在数组中二分查找指定元素
  4. :param nums:
  5. :param target:
  6. :return:
  7. '''
  8. left, right = 0, len(nums) - 1
  9. while left <= right:
  10. mid = left + (right - left) // 2
  11. if nums[mid] == target:
  12. return True
  13. elif nums[mid] < target:
  14. left = mid + 1
  15. else:
  16. right = mid - 1
  17.  
  18. return False
  19.  
  20. def intersect1(num1, num2):
  21. '''
  22. 求两个列表交集元素
  23. :param num1:
  24. :param num2:
  25. :return:
  26. '''
  27. array1 = []
  28. num1 = sorted(num1)
  29. for i in num2:
  30. if binarySearch(num1, i):
  31. array1.append(i)
  32. num1.remove(i)
  33. array1 = sorted(array1)
  34.  
  35. return array1
  36.  
  37. print("==========测试intersect()==========")
  38. nums1 = [1, 3, 1, 2, 4, 2]
  39. nums2 = [4, 8, 1, 2, 1, 3, 8, 2]
  40. array1 = intersect1(nums1, nums2)
  41. print("array1=", array1)
  42.  
  43. def intersect2(nums1, nums2):
  44. '''
  45.  
  46. :param nums1:
  47. :param nums2:
  48. :return:
  49. '''
  50. array2 = []
  51. temp_array2 = set(nums1) & set(nums2) # temp_array2 is a set
  52. for i in temp_array2:
  53. array2 += [i] * min(nums1.count(i), nums2.count(i))
  54. return array2
  55.  
  56. print("+++++++++++测试intersect2()+++++++++++++")
  57. array2 = intersect2(nums1, nums2)
  58. print("array2=", array2)
  59.  
  60. def intersect3(nums1, nums2):
  61. '''
  62.  
  63. :param nums1:
  64. :param nums2:
  65. :return:
  66. '''
  67. array3 = []
  68. for i in nums1:
  69. if i in nums2:
  70. array3.append(i)
  71. nums2.remove(i)
  72. array3 = sorted(array3)
  73. return array3
  74.  
  75. print("----------------测试intersect3()-----------")
  76. array3 = intersect3(nums2, nums1)
  77. print("array3=", array3)

输出:

  1. ==========测试intersect()==========
  2. array1= [1, 1, 2, 2, 3, 4]
  3. +++++++++++测试intersect2()+++++++++++++
  4. array2= [1, 1, 2, 2, 3, 4]
  5. ----------------测试intersect3()-----------
  6. array3= [1, 1, 2, 2, 3, 4]

leetcode350之实现求解两数组交集(包含重复元素)的更多相关文章

  1. JS判断数组是否包含某元素

    我在学习ES6数组拓展时,发现了新增了不少了有趣的数组方法,突然想好工作中判断数组是否包含某个元素是非常常见的操作,那么这篇文章顺便做个整理. 1.for循环结合break 可能很多人第一会想到for ...

  2. JavaScript判断数组是否包含指定元素的方法

    本文实例讲述了JavaScript判断数组是否包含指定元素的方法.分享给大家供大家参考.具体如下: 这段代码通过prototype定义了数组方法,这样就可以在任意数组调用contains方法 /** ...

  3. JS 验证数组中是否包含重复元素

    验证JS中是否包含重复元素,有重复返回true:否则返回false 方案一. function isRepeat(data) { var hash = {}; for (var i in data) ...

  4. [LeetCode] 217. Contains Duplicate 包含重复元素

    Given an array of integers, find if the array contains any duplicates. Your function should return t ...

  5. [LeetCode] 220. Contains Duplicate III 包含重复元素 III

    Given an array of integers, find out whether there are two distinct indices i and j in the array suc ...

  6. [LeetCode] 219. Contains Duplicate II 包含重复元素 II

    Given an array of integers and an integer k, find out whether there are two distinct indices i and j ...

  7. 获取JS数组中所有重复元素

    //获取数组内所有重复元素,并以数组返回 //例:入参数组['1','2','4','7','1','2','2'] 返回数组:['1','2'] function GetRepeatFwxmmc(a ...

  8. 从n个元素中选择k个的所有组合(包含重复元素)

    LeetCode:Combinations这篇博客中给出了不包含重复元素求组合的5种解法.我们在这些解法的基础上修改以支持包含重复元素的情况.对于这种情况,首先肯定要对数组排序,以下不再强调 修改算法 ...

  9. Java-Runoob-高级教程-实例-数组:10. Java 实例 – 查找数组中的重复元素-un

    ylbtech-Java-Runoob-高级教程-实例-数组:10. Java 实例 – 查找数组中的重复元素 1.返回顶部 1. Java 实例 - 查找数组中的重复元素  Java 实例 以下实例 ...

随机推荐

  1. [bzoj2427]P2515 [HAOI2010]软件安装(树上背包)

    tarjan+树上背包 题目描述 现在我们的手头有 \(N\) 个软件,对于一个软件 \(i\),它要占用 \(W_i\) 的磁盘空间,它的价值为 \(V_i\).我们希望从中选择一些软件安装到一台磁 ...

  2. MySQL高级(十三)--- 表锁

    前言:锁是计算机协调多个进程或线程并发访问某一资源的机制.在数据库中,除传统的计算机资源(如CPU.RAM.I/O等)的争用外,数据也是一种供许多用户共享的资源.如何保证数据并发访问的一致性.有效性是 ...

  3. vue 比 js的强大

    //js写留言板 <!DOCTYPE html><html lang="en"><head> <meta charset="UT ...

  4. 学习Vue第一节,Vue的模式与写法格式

    引用Vue <script src="js/vue-2.4.0.js" type="text/javascript" charset="utf- ...

  5. php报错:strip_tags() expects parameter 1 to be string, array given

    囧....... 这个表示参数需要字符串,而你传入了数组,所以出错了~ 检查下函数或者方法是否正确,还有参数

  6. 自己动手写RPC

    接下来2个月 给自己定个目标 年前  自己动手做个RPC 框架 暂时技术选型  是 dotcore + netty + zookeeper/Consul

  7. python3语法学习第四天--字符串

    字符串:是python中的常用数据类型 Python 不支持单字符类型,单字符在 Python 中也是作为一个字符串使用 访问字符串的值: 下标和分片截取 字符串的连接:‘+’ 字符串内置函数挺多,选 ...

  8. linux --开机自动挂载硬盘【转】

    转:http://c.biancheng.net/view/900.html 了解了 mount 命令之后,读者可能会问,系统如何在开机时自动挂载硬盘,它又是怎么知道哪些分区是需要挂载的呢? 很简单, ...

  9. js实现图片幻灯片效果

    其效果是点击图片切换到下一张图片 首先准备五张图片 <ul class="imge"> <li><img src="images/1.jpg ...

  10. python之感知器-从零开始学深度学习

    感知器-从零开始学深度学习 未来将是人工智能和大数据的时代,是各行各业使用人工智能在云上处理大数据的时代,深度学习将是新时代的一大利器,在此我将从零开始记录深度学习的学习历程. 我希望在学习过程中做到 ...