查找重复元素
来源:互联网 发布:ubuntu挂载网络硬盘 编辑:程序博客网 时间:2024/05/29 16:25
题目描述
输入
[1, 2, 4, 4, 3, 3, 1, 5, 3]
输出
[1, 3, 4]
第一种::运用reduce的第二个参数初始化allEle为{}后计算出数组中所有元素出现的次数,
然后循环判断出现次数大于1的元素放入新数组。
function duplicates(arr) {
var m = arr.reduce(function(allEle,curEle,index,arr){
if(curEle in allEle){
allEle[curEle]++;
}else{
allEle[curEle] = 1;
}
return allEle;
},{});
var n = [];
for(v in m){
if(m[v] > 1){
n.push(v);
}
}
return n;
}
第二种::用reduce对allEle进行初始化为数组后,判断allEle中不存在的元素放入,如果allEle中存在说明是重复出现的元素
并不在n数组中则放入新数组n最后返回。
function duplicates(arr) {
var n = [];
var m = arr.reduce(function(allEle,curEle,index,arr){
if(allEle.indexOf(curEle) === -1){
allEle.push(curEle);
}else if(allEle.indexOf(curEle) !== -1 && n.indexOf(curEle) === -1){ //allEle.indexOf(curEle) !== -1 可以去掉了
n.push(curEle);
}
return allEle;
},[]);
return n;
}
第三种::循环数组每一个元素的顺序出现的位置和逆序出现的位置是否一致,位置相同代表不具备相通元素,否则具备。
然后再判断新数组m中是否有这个元素,没有则加入新数组。
function duplicates(arr) {
var m = [];
arr.forEach(function(ele,index,arr){
if(arr.indexOf(ele) !== arr.lastIndexOf(ele) && m.indexOf(ele) === -1){
m.push(ele);
}
});
return m;
}
第四种::运用sort()对数组进行排序后过滤filter()数组,判断排序后的当前元素的前一个和后一个元素的是否相同,
和前一个元素相同说明重复,如果和后一个如果还相同则说明已经在第一次出现的时候return过true啦!!!
function duplicates(arr) {
return arr.sort().filter(function(_,i){
return arr[i] === arr[i + 1] && arr[i] !== arr[i - 1];
}
);
}
第五种::对数组每个元素进行遍历,并比较这个元素后边的每个元素是否有相同的,在碰到相同的时候还要判断是否存在,不存在则放入新数组arr1。
其实我觉得这个还是蛮繁琐的,比较的次数明显增多。
function duplicates(arr) {
var arr1=[];
for(var i=0;i<arr.length;i++){
for(var j=i+1;j<arr.length;j++){
if((arr[i]==arr[j]) && (!arr1.contains(arr[i]))){
arr1.push(arr[i]);
break;
}
}
}
return arr1;
}
Array.prototype.contains = function (obj){
var i = this.length;
while(i--){
if (this[i] === obj){
return true;
}
return false;
}
}
第六种::
/* 时间复杂度为O(n)算法。
思路:遍历数组,将数组的元素和数组出现的次数分别作为对象属性和值。遍历对象,取出
次数大于1的即可。 */
function duplicates(arr) {
var obj = {};
var repeatList = [];
//遍历数组,将数组的值作为obj的索引,出现次数为值
arr.forEach(function(item){
if(obj[item]){
obj[item] +=1;
}else{
obj[item] = 1;
}
});
//获取对象自身属性的keys
var propertyNames = Object.getOwnPropertyNames(obj);
//遍历对象,将重复出现的元素取出
propertyNames.forEach(function(item){
if(obj[item] > 1){
repeatList.push(parseInt(item));
}
});
return repeatList;
}
- 查找重复元素
- js:查找重复元素
- 查找重复元素
- 查找数组重复的元素
- std::vector删除重复元素和查找
- std::vector删除重复元素和查找
- std::vector删除重复元素和查找
- 含有重复元素的二分查找算法
- 查找数组中重复出现的元素
- js 查找数组重复元素方法
- 离散题目2(查找重复元素)
- 经典算法之查找重复元素
- 查找循环数组中元素位置(无重复元素)
- 实现拥有重复元素的二分查找法
- JS 之 查找数组中重复的元素
- 解析、查找数组中重复出现的元素(Java)
- (LeetCode)Contains Duplicate II --- 查找重复的元素升级版
- 算法:从数组中查找重复的元素并分组
- python 类的介绍,继承及重写父类方法
- java 传递参数的两种方式
- 基于Cef的简易浏览器开发(CefSharp)
- 集合流,stream的运用和lamdba的涉及
- vimium使用
- 查找重复元素
- Java 进程间文件锁FileLock详解
- 复习
- 廖雪峰的网站记录
- java.lang.IllegalStateException:Make sure the content of your adapter is not modified from a backgro
- Virtualenv简介
- [BZOJ3993][SDOI2015]星际战争(二分答案+最大流)
- MTK手机官方ROM提取教程
- Nodejs 创建文本文件和Excel文件