两个数组的交集 II
题纲
给定两个数组,编写一个函数来计算它们的交集。
示例 :
输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出: [4,9]
说明:
- 输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。
- 我们可以不考虑输出结果的顺序。
方法1:
这种方法原则上比较暴力对所有的数都进行了一次遍历比较,同时清空了对比数组中当前对比相同的值,以防重复检测
/**
* @param {number[]} nums1
* @param {number[]} nums2
* @return {number[]}
*/
var intersect = function(nums1, nums2) { var arr = []; for(var i=0;i<nums1.length;i++){ for(var j=0;j<nums2.length;j++){ if(nums1[i] === nums2[j]) {
arr.push(nums1[i])
nums2[j]=null;
break;
} } } return arr; };
方法二:
这个方法是在做完方法一以后想到的优化方法
方法一在两个对比数组基数大了以后需要循环的次数成指数上升,
方法二 则使用一个对象作为中间存储变量,将其中一个作为参照的数组映射入对象中,
以数组的值为KEY,对象值是这个映射进去的数组key在数组中出现的次数,
再循环对比数组去取obj中是否有这个key有则说明相同,将该key的值减一,以此类推
/**
* @param {number[]} nums1
* @param {number[]} nums2
* @return {number[]}
*/
var intersect = function(nums1, nums2) { var arr = [],
obj = {}; for(var i=0;i<nums1.length;i++){ if(obj[nums1[i]]){
obj[nums1[i]] = obj[nums1[i]]+1
}else{
obj[nums1[i]] = 1;
}
} for(var j=0;j<nums2.length;j++){ if(obj[nums2[j]]) {
arr.push(nums2[j]);
obj[nums2[j]] = obj[nums2[j]]-1;
} } return arr; };
方法三
/**
* @param {number[]} nums1
* @param {number[]} nums2
* @return {number[]}
*/
var intersect = function(nums1, nums2) { var arr = []; nums1.forEach(item=>{
let a = nums2.indexOf(item);
if(a>-1){
arr.push(item)
nums2[a] = null
}
}) return arr; };
进阶:
- 如果给定的数组已经排好序呢?你将如何优化你的算法?
- 如果 nums1 的大小比 nums2 小很多,哪种方法更优?
- 如果 nums2 的元素存储在磁盘上,磁盘内存是有限的,并且你不能一次加载所有的元素到内存中,你该怎么办?
两个数组的交集 II的更多相关文章
- 6、两个数组的交集 II
6.两个数组的交集 II 给定两个数组,编写一个函数来计算它们的交集. 示例 1: 输入: nums1 = [1,2,2,1], nums2 = [2,2] 输出: [2,2] 示例 2: 输入: n ...
- leecode刷题(6)-- 两个数组的交集II
leecode刷题(6)-- 两个数组的交集II 两个数组的交集II 描述: 给定两个数组,编写一个函数来计算它们的交集. 示例: 输入: nums1 = [1,2,2,1], nums2 = [2, ...
- 【Leetcode】【简单】【350. 两个数组的交集 II】【JavaScript】
题目描述 350. 两个数组的交集 II 给定两个数组,编写一个函数来计算它们的交集. 示例 1: 输入: nums1 = [1,2,2,1], nums2 = [2,2]输出: [2,2] 示例 2 ...
- 前端与算法 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 两个数组的交集 II
两个数组的交集 II 题目地址:https://leetcode-cn.com/problems/intersection-of-two-arrays-ii/ 给定两个数组,编写一个函数来计算它们的交 ...
- 初级算法-6.两个数组的交集 II
题目描述: 给定两个数组,编写一个函数来计算它们的交集. 示例 : 输入: nums1 = [,,,], nums2 = [,] 输出: [,] 示例 : 输入: nums1 = [,,], nums ...
- 【leetcode 简单】 第八十五题 两个数组的交集 II
给定两个数组,编写一个函数来计算它们的交集. 示例 1: 输入: nums1 = [1,2,2,1], nums2 = [2,2] 输出: [2,2] 示例 2: 输入: nums1 = [4,9,5 ...
- leetcode 两个数组的交集 II
给定两个数组,写一个方法来计算它们的交集. 例如: 给定 nums1 = [1, 2, 2, 1], nums2 = [2, 2], 返回 [2, 2]. /** * @param {number[] ...
- 算法------------数组----------------两个数组的交集 II
给定两个数组,编写一个函数来计算它们的交集. 示例 1: 输入: nums1 = [1,2,2,1], nums2 = [2,2] 输出: [2,2] 示例 2: 输入: nums1 = [4,9,5 ...
随机推荐
- 直接从ADB接出串口调试
1,从硬件接出串口线 2,用串口工具连接上串口工具,串口工具地址:https://files.cnblogs.com/files/senior-engineer/%E4%B8%B2%E5%8F%A3% ...
- 均值为1的独立指数随机Y1,Y2,组合成的Y=Y1-(Y2-1)^2/2 在Y>0的条件下也是指数随机变量
均值为1的独立指数随机Y1,Y2,组合成的Y=Y1-(Y2-1)^2/2 在Y>0的条件下也是指数随机变量 另一个条件分布 13题有错误,应该是P{x<X<x+dx,y<Y& ...
- java判断文件真实类型
代码如下: import java.io.FileInputStream; import java.io.IOException; import java.util.HashMap; /** * &l ...
- 安装和使用nltk
安装 参考:https://www.cnblogs.com/zrmw/p/10869325.html 分词:注意先分句再分词,这些对象均来自nltk.tokenize库 word_tokenize 导 ...
- Docker 运行Kafka容器
1. 启动Zookeeper docker run -d --name zookeeper -p 2181:2181 -t wurstmeister/zookeeper 2. 启动Kafka dock ...
- OpenShift 4.2 etcd operatorhub离线环境部署
本文记录在OperatorHub中存在界面但缺少镜像的环境下如何安装部署.感谢王征提供的大力支持和指导. 现在一个在线环境找到etcd所需要的镜像 quay.io/coreos/etcd-operat ...
- delphi uniDac
Delphi 2010安装及使用UniDAC 4.0 UniDAC是一个功能强大的非可视化跨数据库的数据访问组件,可用于Delphi,Delphi for .NET,C++Builder,and La ...
- DOM事件: DOM事件级别、DOM事件流、DOM事件模型、DOM事件捕获过程、自定义事件
前端面试中只要问到事件,就肯定会有DOM事件:如果回答出来了,就会一直向下延申,其实这些东西都很简单,但我第一次被问到的时候,也是懵的: DOM事件级别: DOM0 element.onclick = ...
- svg可视化制作工具
svg可视化制作工具直接ai里面用钢笔路径画好 然后右键建立复合路径 最后存储为svg即可 这样生成的svg就带path标签了
- 有关dfs、bfs解决迷宫问题的个人见解
可以使用BFS或者DFS方法解决的迷宫问题! 题目如下: kotori在一个n*m迷宫里,迷宫的最外层被岩浆淹没,无法涉足,迷宫内有k个出口.kotori只能上下左右四个方向移动.她想知道有多少出口是 ...