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

示例 1:

输入: nums1 = [1,2,2,1], nums2 = [2,2]
输出: [2,2]
示例 2: 输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出: [4,9]
说明: 输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。
我们可以不考虑输出结果的顺序。
进阶: 如果给定的数组已经排好序呢?你将如何优化你的算法?
如果 nums1 的大小比 nums2 小很多,哪种方法更优?
如果 nums2 的元素存储在磁盘上,磁盘内存是有限的,并且你不能一次加载所有的元素到内存中,你该怎么办?

看完问题描述 发现看似简单 但是其实有一点点的难 难点在于如果2个数组中存在重复数字,则交集也必须重复

先说下 自己当时的想法

没有想到什么简单方法 只能使用蛮力法 通过两层循环 每一个数字与另外一个数组中的数字对比。并且加一个判断,如果相同则在之后的对比时不对比此下标的值

上代码(通过-用时110ms)

 class Solution:

     def intersect2(self, nums1, nums2):
"""
:type nums1: List[int]
:type nums2: List[int]
:rtype: List[int]
"""
result = [] for i in nums1:
for j in nums2:
if i == j:
result.append(i) #插入交集
nums2.remove(j) #插入过的值不再出现
break
return result
if __name__=="__main__":
nums1=[1,2,2,1]
nums2=[1,2]
s=Solution()
print(s.intersect(nums1,nums2))

这个是笔者想到的方法。使用蛮力法,比较耗时,需要110ms。

然后上评论区大佬的代码(特别赏心悦目 5行代码解决问题)

 class Solution(object):
def intersect(self, nums1, nums2):
"""
:type nums1: List[int]
:type nums2: List[int]
:rtype: List[int]
"""
inter = set(nums1) & set(nums2) #inter为两个list的相同元素
l = []
for i in inter:
l += [i] * min(nums1.count(i), nums2.count(i)) #相同元素的共同出现次数
return l

这个方法比较难想,是一个很有趣的解法

思想:通过set的唯一性找出两list的唯一交集,再利用min方法找到交集的共同出现次数

前面方法的效率较低 介绍一种方法使用字典进行查找

思想:通过key,value进行存储,key为值的个数,value为值。 先把nums1存放入字典中。遍历nums2中的值对比字典,相同则数量减一并放入list中,最后返回list

 class Solution:
#利用字典实现交集
def intersect(self,nums1,nums2):
record={}
result=[]
for i in nums1:
# 注意python3.x用contains()方法取代has_key()
if(record.__contains__(i)):
record[i]+=1 #将字典的key值数+1
else:
record[i]=1 #将i加入字典中 key为1
for j in nums2:
if(record.__contains__(j) and record[j]>0):
record[j]-=1 #i的key值减1
result.append(j)
return result
if __name__=="__main__":
s=Solution()
num1=[1,2,3,4,4,1]
num2=[4,2,3]
print(s.intersect(num1,num2))

值得注意的是:python 3.x的版本将has_key()方法换为_contains_()

会发现通过时间为48ms 效率有所提升

python(leetcode)-350两个数组的交集的更多相关文章

  1. 前端与算法 leetcode 350. 两个数组的交集 II

    目录 # 前端与算法 leetcode 350. 两个数组的交集 II 题目描述 概要 提示 解析 解法一:哈希表 解法二:双指针 解法三:暴力法 算法 # 前端与算法 leetcode 350. 两 ...

  2. Java实现 LeetCode 350 两个数组的交集 II(二)

    350. 两个数组的交集 II 给定两个数组,编写一个函数来计算它们的交集. 示例 1: 输入: nums1 = [1,2,2,1], nums2 = [2,2] 输出: [2,2] 示例 2: 输入 ...

  3. Leetcode 350.两个数组的交集|| By Python

    给定两个数组,编写一个函数来计算它们的交集. 示例 1: 输入: nums1 = [1,2,2,1], nums2 = [2,2] 输出: [2,2] 示例 2: 输入: nums1 = [4,9,5 ...

  4. LeetCode 350: 两个数组的交集 II Intersection of Two Arrays II

    题目: 给定两个数组,编写一个函数来计算它们的交集. Given two arrays, write a function to compute their intersection. 示例 1: 输 ...

  5. [LeetCode] 350. 两个数组的交集 II intersection-of-two-arrays-ii(排序)

    思路: 先找到set的交集,然后分别计算交集中的每个元素在两个原始数组中出现的最小次数. class Solution(object): def intersect(self, nums1, nums ...

  6. 【Leetcode】【简单】【350. 两个数组的交集 II】【JavaScript】

    题目描述 350. 两个数组的交集 II 给定两个数组,编写一个函数来计算它们的交集. 示例 1: 输入: nums1 = [1,2,2,1], nums2 = [2,2]输出: [2,2] 示例 2 ...

  7. LeetCode初级算法之数组:350 两个数组的交集 II

    两个数组的交集 II 题目地址:https://leetcode-cn.com/problems/intersection-of-two-arrays-ii/ 给定两个数组,编写一个函数来计算它们的交 ...

  8. Java实现 LeetCode 349 两个数组的交集

    349. 两个数组的交集 给定两个数组,编写一个函数来计算它们的交集. 示例 1: 输入: nums1 = [1,2,2,1], nums2 = [2,2] 输出: [2] 示例 2: 输入: num ...

  9. Leetcode 349. 两个数组的交集 By Python

    给定两个数组,编写一个函数来计算它们的交集. 示例 1: 输入: nums1 = [1,2,2,1], nums2 = [2,2] 输出: [2] 示例 2: 输入: nums1 = [4,9,5], ...

随机推荐

  1. springboot寻找property的顺序

    Spring Boot uses a very particular PropertySource order that is designed to allow sensible overridin ...

  2. Curl 基本命令

    下载单个文件,默认将输出打印到标准输出中(STDOUT)中 curl http://www.centos.org 通过-o/-O选项保存下载的文件到指定的文件中:-o:将文件保存为命令行中指定的文件名 ...

  3. 命名空间 extern的用法 static全局变量

    std是标准库中的命名空间: 关于extern的用法可以参考文献http://blog.163.com/sunjinxia%40126/blog/static/94984879201312145021 ...

  4. mysql 判断字符串是否有某个字符

    代码: SELECT LOCATE("_","a_123") -->2  (返回字符的位置,从1开始) SELECT ('123' REGEXP '[^0 ...

  5. Android Studio 减小项目文件夹的大小和.gitignore文件配置

    Build --> Clean Project 可以清理出很大一部分的空间 手动删除以下文件或者目录 Dir : ProjectFolder/buildDir : ProjectFolder/a ...

  6. 46-web页面登入前和登入后控制

    可以将user存入session中,然后在前端根据能否取到user,来判断是否登入 <c:if test="${user == null }"> <li clas ...

  7. Pandas 合并 concat

    pandas处理多组数据的时候往往会要用到数据的合并处理,使用 concat是一种基本的合并方式.而且concat中有很多参数可以调整,合并成你想要的数据形式. 1.axis(合并方向):axis=0 ...

  8. VMWare 14.1 15 Pro 安装 macOS Mojave 10.14.1系统 遇到的问题解决方案

    安装环境 WIN10VMware Workstation Pro 15.0.0 Build 10134415工具准备1.VMware Workstation Pro 15.0.0 Build 1013 ...

  9. idea环境配置

    Idea 下载 https://www.jetbrains.com/idea/download/#section=windows idea安装(略) idea破解 window配置hosts文件:0. ...

  10. Event对象和触发

    1.构造: //非IE浏览器事件构造方法 var event = document.createEvent('HTMLEvents');//'HTMLEvents'自定义事件名 //IE浏览器构造方法 ...