数组去重

#js数组去重
暴力做https://leetcode.com/problems/remove-duplicates-from-sorted-array/题,报超时错误。从题库的输入看,测试数据一个范围在[-999,9999],长度为21998的有序数组。剔除重复项后长度为10999。

####暴力代码:

1
2
3
4
5
6
7
8
9
10
11
var removeDuplicates = function(nums) {
for(var i = 0 ; i < nums.length; i++){
for(var j = i + 1; j < nums.length; j++){
if(nums[i] === nums[j]){
nums.splice(j,1);
j--; //nums剔除了重复数,相应的j的index-1
}
}
}
return nums.length;
};

chrome控制台用了274ms,一般ACM超时不都是1000ms么。
假装自己会计算算法时间,两次循环用了O(n*n),splice时间不知。

####Object keys方法:

1
2
3
4
5
6
7
8
var removeDuplicatesByObject = function(nums){
var obj = {};
for(var i = 0; i < nums.length; i++){
obj[nums[i]] = 0;
}
var arr = Array.from(Object.keys(obj)); //arr内容变成了string
console.log(arr.length);
}

平均耗时约12ms。

####es6 Set方法

1
2
3
4
var removeDuplicatesBySet = function(nums){
var arr = Array.from(new Set(nums));
console.log(arr.length);
}

耗时26ms

####看看lodash去重时间
4ms!!!