【面试经典150题】删除有序数组中的重复项 JavaScript

43 阅读1分钟

题目链接

思路1:使用set。

/**
 * @param {number[]} nums
 * @return {number}
 */
var removeDuplicates = function(nums) {
	const uniqueSet=new Set();
    for(let i=0;i<nums.length;i++){
        uniqueSet.add(nums[i]);
    }
    const uniqueArray=Array.from(uniqueSet);
    nums.length=0;
    nums.push(...uniqueArray);
    return nums.length;
};

时间复杂度:O(nums.length)O(nums.length)

空间复杂度:O(nums.length)O(nums.length)

在这里插入图片描述

思路2:使用Hash数组标识重复项。

/**
 * @param {number[]} nums
 * @return {number}
 */
var removeDuplicates = function(nums) {
	let hash=[];
    let uniqueCount=0;
    for(let i=0;i<nums.length;i++){
        if(!hash[nums[i]]){
            hash[nums[i]]=true;
            nums[uniqueCount++]=nums[i];
        }
    }
    nums.length=uniqueCount;
    return uniqueCount;
};

在这里插入图片描述

时间复杂度:O(nums.length)O(nums.length)

空间复杂度:O(nums.length)O(nums.length)