js + leetcode刷题:No.26.删除排序数组中的重复项

题目:

给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。

解法:

// Solution One -- move distinct element to the front of the array
/**
 * @param {number[]} nums
 * @return {number}
 */
let removeDuplicates1 = function(nums) {
    let len = nums.length;
    if(len <= 1){
        return len
    }else{
        let count = 1;
        for(let i = 0; i < len; i++){
            if(nums[count - 1] !== nums[i]){
                nums[count++] = nums[i]
            }
        }
        return count
    }
};
// Solution Two -- Double Pointer双指针
let removeDuplicates2 = function(nums){
    let p = 0, q = 1;
    while(q < nums.length){
        if(nums[p] === nums[q]){
            q++
        }else{
            nums[p+1] = nums[q]
            p++
            q++
        }
    }
    return ++p
}

备注:

双指针的使用方式非常值得参考,毕竟是很经典的算法思路

发布了67 篇原创文章 · 获赞 8 · 访问量 6343

猜你喜欢

转载自blog.csdn.net/qq_34425377/article/details/104964518