算法 删除排序数组中的重复项

该问题要求在保持元素相对顺序不变的情况下,从升序排列的数组中删除重复元素。解决方案是使用一个计数器和临时变量,遍历数组,遇到不等于当前临时变量的元素时,将其赋值给原数组的下一个位置,并更新临时变量。最后返回计数器加一作为新数组的长度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

给你一个升序排列的数组nums,请你原地删除重复出现的元素,使每个元素只出现一次,返回删除后数组的新长度。元素的相对顺序应该保持一致 。然后返回nums中唯一元素的个数。

示例

思路分析:我刚开始的思路是首先for循环遍历nums数组,让当前元素和前一个元素比较,定义一个flag变量,将重复元素赋给一个新的数组,然后定义count变量记录新数组长度,第二次遍历新数组。但因为声明数组的时候要给定数组长度且不能是变量,这种方法无法确定数组长度所以放弃,所以我想能不能将重复的值赋给原数组,赋给原数组首先要明确要赋值哪些元素,我仔细想后发现设置flag标记不仅需要二次遍历,而且无法将标记携带在要赋值的元素上,相对于的任何标记性质的变量都是没用的

        参考了答案后发现答案是用的for range遍历,其实用for循环也一样,答案找到目标元素的方法是先定义一个count,将nums[0]赋给一个临时变量,进入循环,如果当次循环中的nums[i]等于临时变量就continue跳出当次循环,如果不等则将nums[i]赋给nums[count]和临时变量以不断更新第一次出现的元素,然后count++,这样就实现将数组中第一次出现的元素赋值给原数组了,然后再返回元素数count+1

func removeDuplicates(nums []int) int {
    cur := nums[0]
    var ptr int

    for _, v := range nums{
        if v == cur {
            continue
        }

        ptr++
        nums[ptr], cur = v, v
    }

    return ptr + 1
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值