javascript数组去重

看到面试分享:一年经验初探阿里巴巴前端社招 这篇文章,学习到了很多,也发现了自己其实有很多不知道,所以记录下。。

数组去重

博主提到了这些方法:

1
2
3
4
5
6
7
///ES6实现:
[...new Set([1,2,3,1,'a',1,'a'])]

///ES5实现:
[1,2,3,1,'a',1,'a'].filter(function(ele,index,array){
return index===array.indexOf(ele)
})

然后有人回复说用Map,我查了下,应该是这种方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Array.prototype.unique = function () {
var arr = [];
var map = new Map();
for(var i = 0; i < this.length; i++){
if(!map.has(this[i])){
arr.push(this[i]);
map.set(this[i],true)
}
}
return arr;
};

Array.prototype.unique2 = function () {
var arr = [];
var set = new Set(this);
set.forEach(function (item) {
arr.push(item);
});
return arr;
};

二分查找时间复杂度分析

博主在二分查找的时间复杂度怎么求,是多少 问题上 没回答上来,我看的时候也忘记了,遂查了下:

二分查找的基本思想是将n个元素分成大致相等的两部分,去a[n/2]与x做比较,如果x=a[n/2],则找到x,算法中止;如果x<a[n/2],则只要在数组a的左半部分继续搜索x,如果x>a[n/2],则只要在数组a的右半部搜索x.

时间复杂度无非就是while循环的次数!

总共有n个元素,

渐渐跟下去就是n,n/2,n/4,….n/2^k,其中k就是循环的次数

由于你n/2^k取整后>=1

即令n/2^k=1

可得k=log2n,(是以2为底,n的对数)

参考资料:
二分查找时间复杂度的计算(转)
二分查找时间复杂度分析
理解O(log2N)和O(Nlog2N)

欢迎关注我的公众号:沉迷Spring
显示 Gitment 评论
0%