700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 查找重复出现N次或N次以上的数组项

查找重复出现N次或N次以上的数组项

时间:2019-10-21 10:22:12

相关推荐

查找重复出现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}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。