leetcode 从排序数组中删除重复项

本文分享了一种去除数组中重复元素的算法实现过程。针对排序数组,通过三种不同的方法实现了去除重复元素的功能,包括使用splice操作直接删除重复项、采用简化循环减少计算复杂度,以及借鉴大佬思路进一步优化代码效率。

最近的学习是相当的无聊,并且很无趣,每天都浪费了很多时间,比如今天下午,就是搞一手成语接龙,我也是醉了…
并且我也不知道学什么了,所以决定刷题
虽然我是0算法基础,0逻辑能力的渣渣,但是尽力每天做一道题,总会慢慢进步的

给定数组 nums = [1,1,2],
函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。
你不需要考虑数组中超出新长度后面的元素。

我最初的想法

    let removeDuplicates = function (nums) {
        for (let i = 0; i !== nums.length; i++) {
            //从当前开始向后找到相同的就删掉
            while (nums.indexOf(nums[i], i + 1) !== -1) {
                nums.splice(i, 1);
            }
        }
        return nums.length;
    };

由于条件给定的是一个排序后的有序数组,所以可以少掉一层循环

    let removeDuplicates = function (nums) {
        for (let i = 0; i !== nums.length; i++) {
            if (nums[i] === nums[i + 1]) {
                nums.splice(i, 1);
                i--;
            }
        }
        return nums.length;
    };

可以看见别人的代码,不愧是大佬的想法,牛皮

var removeDuplicates = function (nums) {
    let j = 0;
    for (let i = 0, t = ''; i < nums.length; i++) {
        if (nums[i] !== t) {
            t = nums[i];
            nums[j] = t;
            j++
        }
    }
    return j;
};

转载于:https://www.cnblogs.com/sbzy/p/9374984.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值