查找重复出现N次或N次以上的数组项
1. 临时变量+遍历
function duplicates (arr,repeatSum){//将数组排序arr = arr.sort()//原数组长度const n = arr.length//用于保存重复元素的数组let newArr = []//临时变量用于临时保存符合条件的重复元素let dup = undefined//遍历数组for(let i = 0 ; i < n ; i++){//当前元素const current = arr[i]//如果当前元素是重复元素,将其添加到结果数组,并跳过此次循环if( current === dup ) {newArr.push(current)continue}//否则说明是一个新值//如果剩下的数小于要求的重复次数//说明剩下的数已经不可能满足条件//直接跳出循环if( (n-i) < repeatSum ) {break}//从新数开始往后数repeatSum个数//如果值跟当前新值不同//说明当前这个数不满足条件//直接跳过if( arr[i+repeatSum-1] !== current ){continue}//当前满足条件//重新把它标记成重复添加到结果数组dup = currentnewArr.push(current)}return newArr}
2. 临时数组+遍历
function duplicates (arr,repeatSum){//将数组排序arr = arr.sort()//原数组长度const n = arr.length//用于保存重复元素的数组let newArr = []//原数组为空,直接返回if(!n) {return newArr}//dups 记录重复元素,从第0个开始let dups = [arr[0]]//从第一个开始遍历for(let i = 0 ; i < n ; i++){//当前元素const current = arr[i]//如果当前元素是已遇到过的重复元素,将其推入if( current === dups[0] ) {dups.push(current)continue}//否则说明是一个新值//检查先前重复的元素,如果超过指定次数,就添加到数组if( (dups.length >= repeatSum ) {dups.forEach(function(dup){newArr.push(dup)})}//将重复的元素重新初始化为当前元素dups = [current]}//检查最后的重复元素是否超过指定次数,同样加入结果数组/*if( dups.length >= repeatSum ) {dups.forEach(function(dup){newArr.push(dup)})}*/return newArr}
3. Map映射表方式
function duplicates (arr,repeatSum){//建一个映射表,保存一个值到重复值数组的映射let m = new Map()//用于保存结果的数组let newArr = []//遍历数组,原数组不要求有序for(let value of arr){//通过映射表拿到重复值数组const array = m.get(value)//数组存在,说明这个值之前出现过,直接推入数组 if(array){array.push(value)}else{//否则,说明这是一个新值,建立映射关系m.set(value,[value])}}//遍历映射表每个value,即每个重复值数组m.forEach(function(array){//如果数组长度刚好是要求的重复次数if(array.length >= repeatSum){array.forEach(function(value){//将其加入到结果数组newArr.push(value)})}})return newArr}
查找重复出现N次或N次以上的数组项相关推荐
- oracle查找重复记录
oracle查找重复记录 SELECT * FROM t_info a WHERE ((SELECT COUNT(*) FROM t_info WHERE Ti ...
- Oracle查找重复数据
2019独角兽企业重金招聘Python工程师标准>>> -- 使用ROWID查找重复数据 -- PK_PSNDOC:查找该字段的重复数据值 -- LASTFLAG:条件过滤字段 SE ...
- 利用 Linux 查找重复文件
方法一:使用Find命令 本部分算是对find强大功能的扩展使用方法说明.在find的基础上,我们可与(如xargs命令)等其它基本Linux命令相结合,即能创造出无限的命令行功能,比如:可以快速查找 ...
- LeetCode 数据库 182. 查找重复的电子邮箱
182. 查找重复的电子邮箱 Ideas 使用 GROUP BY 和 HAVING 条件. 向 GROUP BY 添加条件的一种更常用的方法是使用 HAVING 子句,该子句更为简单高效. Code ...
- java找重复字符串_在java中怎样查找重复字符串
在一段java编程代码中,字符串是不可缺少的一个要素,属于java中的基础知识,字符串不仅在java面试题中会出现,在编写代码时更要掌握怎样使用字符串.在前面我们也学习过关于字符串截取的知识,你应该有 ...
- 182. 查找重复的电子邮箱
2020-03-21 1.题目描述 查找重复的电子邮箱 2.题解 好久没有接触mysql了,写起来还是相当生疏 3.代码 select Email from Person group by Email ...
- 查找重复文件_快速查找、删除重复图片及文件!
照片或者文件多了难免就会有重复,浪费硬盘空间的情况,下面让我们一起使用ACDSee 官方免费版软件删除你的重复图片及文件吧! 1. 打开软件,点击"工具"下的"查找重复项 ...
- Sublime中查找重复行的正则表达式
Sublime中查找重复行的正则表达式 先按F9对所有内容排序: 然后Ctrl+F 调出查找面板: 将下面的正则表达式放进去,并选择正则表达式选项 正则表达式:^(.+)$[\r\n](^\1$[\r ...
- SQL 查找重复记录
SQL 查找重复记录 CREATE TABLE product ( ID INT IDENTITY(1,1) PRIMARY KEY NOT NULL, Pid INT NOT NULL, Pn ...
最新文章
- python定义的关键数据类型_Python基本数据类型
- 怎么查看oracle数据库数据量大小?
- 金融数据信噪比的影响力又一力证
- 【图解】java8性能对比_Java 11 究竟比 8 快了多少?
- php mysql_connect 不支持_php mysql_connect不支持的解决方法
- 数组指针 和 指针数组
- RBAC权限模型及数据权限扩展的实践
- Spark之GraphX
- 解决移动端报错:Unable to preventDefault inside passive event listener due to target being treated as……
- window下环境变量立即生效
- for linux pdf转mobi_下载安装Calibre在Linux CLI中将ePub文件转换为PDF格式
- 反向题在测试问卷信效度_如何进行问卷的信度和效度分析_spss问卷信度效度分析...
- [Maven] 无法获取私服最新Jar包的问题
- vant list 分页问题
- 永远不要忘记_它永远不会忘记一张脸
- 计算机应用技术专业的大学生职业生涯规划书,计算机应用专业大学生职业生涯规划书范文...
- android 之电话监听
- 中国移动,联通,电信
- ubuntu双显卡、多屏幕,左上角光标一直闪烁无法进入系统或能进入系统但某个屏幕黑屏
- php漏洞 乌云,灵活布置、可二次开发的乌云公开漏洞及知识库搜索