看到面试分享:一年经验初探阿里巴巴前端社招 这篇文章,学习到了很多,也发现了自己其实有很多不知道,所以记录下。。
数组去重
博主提到了这些方法: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 | Array.prototype.unique = function () { |
二分查找时间复杂度分析
博主在二分查找的时间复杂度怎么求,是多少 问题上 没回答上来,我看的时候也忘记了,遂查了下:
二分查找的基本思想是将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的对数)