python(leetcode)-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]
说明: 输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。
我们可以不考虑输出结果的顺序。
进阶: 如果给定的数组已经排好序呢?你将如何优化你的算法?
如果 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两个数组的交集的更多相关文章
- 前端与算法 leetcode 350. 两个数组的交集 II
目录 # 前端与算法 leetcode 350. 两个数组的交集 II 题目描述 概要 提示 解析 解法一:哈希表 解法二:双指针 解法三:暴力法 算法 # 前端与算法 leetcode 350. 两 ...
- Java实现 LeetCode 350 两个数组的交集 II(二)
350. 两个数组的交集 II 给定两个数组,编写一个函数来计算它们的交集. 示例 1: 输入: nums1 = [1,2,2,1], nums2 = [2,2] 输出: [2,2] 示例 2: 输入 ...
- Leetcode 350.两个数组的交集|| By Python
给定两个数组,编写一个函数来计算它们的交集. 示例 1: 输入: nums1 = [1,2,2,1], nums2 = [2,2] 输出: [2,2] 示例 2: 输入: nums1 = [4,9,5 ...
- LeetCode 350: 两个数组的交集 II Intersection of Two Arrays II
题目: 给定两个数组,编写一个函数来计算它们的交集. Given two arrays, write a function to compute their intersection. 示例 1: 输 ...
- [LeetCode] 350. 两个数组的交集 II intersection-of-two-arrays-ii(排序)
思路: 先找到set的交集,然后分别计算交集中的每个元素在两个原始数组中出现的最小次数. class Solution(object): def intersect(self, nums1, nums ...
- 【Leetcode】【简单】【350. 两个数组的交集 II】【JavaScript】
题目描述 350. 两个数组的交集 II 给定两个数组,编写一个函数来计算它们的交集. 示例 1: 输入: nums1 = [1,2,2,1], nums2 = [2,2]输出: [2,2] 示例 2 ...
- LeetCode初级算法之数组:350 两个数组的交集 II
两个数组的交集 II 题目地址:https://leetcode-cn.com/problems/intersection-of-two-arrays-ii/ 给定两个数组,编写一个函数来计算它们的交 ...
- Java实现 LeetCode 349 两个数组的交集
349. 两个数组的交集 给定两个数组,编写一个函数来计算它们的交集. 示例 1: 输入: nums1 = [1,2,2,1], nums2 = [2,2] 输出: [2] 示例 2: 输入: num ...
- Leetcode 349. 两个数组的交集 By Python
给定两个数组,编写一个函数来计算它们的交集. 示例 1: 输入: nums1 = [1,2,2,1], nums2 = [2,2] 输出: [2] 示例 2: 输入: nums1 = [4,9,5], ...
随机推荐
- linux上部署Appach,让文件目录以网页列表形式访问
效果: 1.首先,需要安装Apache httpd服务 yum install -y httpd 2.查看或者设置httpd主配文件 vim /etc/httpd/conf/htpd.conf 从中可 ...
- create react app遇到的问题
我现在想的是吧 static 资源和动态 api 来分开处理, static 资源开启 nginx 服务器,api 请求由 express 完成, 现在的问题是开发的时候 proxy 设定将所有的请求 ...
- 顶级项目孵化的故事系列——Kylin的心路历程【转】
现在已经名满天下的 Apache Kylin,是 Hadoop 大数据生态系统不可或缺的一部分,要知道在 Kylin 项目早期,可是以华人为主的开源团队,一路披荆斩棘经过几年的奋斗,才在 Apache ...
- [leetcode]205. Isomorphic Strings 同构字符串
Given two strings s and t, determine if they are isomorphic. Two strings are isomorphic if the chara ...
- OS history
UNIX的诞生 1965年时,贝尔实验室(Bell Labs)加入一项由奇异电子(General Electric)和麻省理工学院(MIT)合作的计划:该计划要建立一套多使用者.多任务.多层次(m ...
- .net 简单任务调度平台安装简要说明
.net 简单任务调度平台,用于.net dll,exe的任务的挂载,任务的隔离,调度执行,访问权限控制,监控,管理,日志,错误预警,性能分析等. 平台基于quartz.net进行任务调度功能开发,采 ...
- IOS内存管理详解
一. 基本原理 1. 什么是内存管理 移动设备的内存极其有限,每个app所能占用的内存是有限制的 当app所占用的内存较多时,系统会发出内存警告,这时得回收一些不需要再使用的内存空 ...
- 2019.03.02 bzoj2565: 最长双回文串(pam)
传送门 题意简述:问最长的由两个回文串连接而成最长字串长度. 思路: 正反串各建一个pampampam然后就完了. 代码: #include<bits/stdc++.h> #define ...
- [Err] 1418 - This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creator【s
问题:执行创建函数的sql文件报错如下: [Err] 1418 - This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA ...
- JAVA 8 主要新特性 ----------------(三)新功能Lambda表达式入门
一.简述 Java为了扩充匿名方法在1.8中新追加的特性.本身Java之前的版本是没有匿名方法的,只有匿名对象. 二.使用 Java中使用匿名方法必须要对应接口中的一个抽象方 ...