JesseZhao1990/algorithm

数组去重

JesseZhao1990 opened this issue · 6 comments

/**
 * @param {number[]} nums
 * @return {number}
 */
var removeDuplicates = function(nums) {
    nums = nums.sort();
    function loop(nums){
        for(var i=1;i<=nums.length;i++){
            if(nums[i] === nums[i-1]){
                nums.splice(i,1);
                loop(nums);
                return;
            }
        }
    }
    loop(nums);
    return nums;
};

console.log(removeDuplicates([1,1,2]));
//console.log(removeDuplicates([0,0,1,1,1,2,2,3,3,4]));

/* 方法二 */

var removeDuplicates1 = function(nums) {
    var set  = new Set();
    for(var i =0;i<nums.length;i++){
        set.add(nums[i]);
    }
    return [...set];
}
console.log(removeDuplicates1([1,1,2]));
console.log(removeDuplicates1([0,0,1,1,1,2,2,3,3,4]));
[0,0,1,1,1,2,2,3,3,4].reduce((curr, next) => curr.indexOf(next) === -1 ? curr.concat(next) : curr, [])
[...new Set([1,2,3,3])]
Array.from(new Set([1,1,2,2,3,4,5,5,5,6,6,6]))

第一种去重的时间复杂度有O(n2)了吧

@royalrover 并没有吧~虽然看起来好像有循环的嵌套。但是有return。return起了一个剪枝的作用。其实就是对一个数组扫描了一遍。

取其最坏情况的阶数

let arr = [0, 0, 1, 1, 1, 2, 2, 3, 3, 4]
arr.filter((item, index) => arr.indexOf(item) === index)