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

示例 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. 大数据入门到精通7--对复合value做reducebykey

    培训系列7--对复合value做reduce 1.做基础数据准备 val collegesRdd= sc.textFile("/user/hdfs/CollegeNavigator.csv& ...

  2. DJango 基础 (1)

    django基础 知识点: 基本认知 工具准备 新建项目 目录及文件说明 开发服务器 创建视图函数 新建应用(app) 1.基本认知 Django是用Python开发的一个免费开源的Web框架,可以用 ...

  3. 远程连接ORACLE服务

    远程服务端操作系统: Windows Server 2003 Enterprise Edition sp2ORACLE 版本: Oracle 9.2.0.1.0 正式版 本地客户端操作系统: Wind ...

  4. 156. Binary Tree Upside Down反转二叉树

    [抄题]: Given a binary tree where all the right nodes are either leaf nodes with a sibling (a left nod ...

  5. springboot + @KafkaListener 手动提交及消费能力优化

    转载 https://blog.csdn.net/asd5629626/article/details/82776450  https://blog.csdn.net/asd5629626/artic ...

  6. SQL Server 2000使用链接服务器

    执行:安装盘\SQL2KSP4\install\instcat.sql 文件下载地址:http://download.csdn.net/detail/taomanman/5680765

  7. POST application/json 适用于传递多层的json

    本来以为自己写了那么多post请求,ajax已经难不住了呢, 结果现实无比的残酷, 后台换成了java,发多层级的json,后台就取不到了, 虽然到最后还是配置正确了,..记录下来,引以为戒, axi ...

  8. MySQL优化(三) 表的设计

    1.什么样的表才符合3范式(3 NF)? 表的范式,是首先符合1范式,才能满足2范式,进一步才能满足3范式:(现在最高级别是6范式) 第一范式:1NF 是对属性的原子性约束,要求表的属性(列)具有原子 ...

  9. cpp 区块链模拟示例(五) 序列化

    有了区块和区块链的基本结构,有了工作量证明,我们已经可以开始挖矿了.剩下就是最核心的功能-交易,但是在开始实现交易这一重大功能之前,我们还要预先做一些铺垫,比如数据的序列化和启动命令解析. 根据< ...

  10. 设计模式 策略模式2 c++11

    根据需求的不同 选择不同的策略算法 之前是保存的各种策略类的指针 这里直接使用 function  bind 选择对应的算法 代码 // 005.cpp: 定义控制台应用程序的入口点. // #inc ...