【数据结构练习题】删除有序数组中的重复项

图片来源于网络

✨博客主页:小钱编程成长记
🎈博客专栏:数据结构练习题
🎈相关博文:消失的数字 — 三种解法超详解

1.🎈题目

在这里插入图片描述
在这里插入图片描述
力扣链接

2. 🎈解题思路

1.非严格递增的数组:两个相邻元素相等或递增的数组
2. 因为要在原地删除重复的元素,所以不能再创建数组,以数组为跳板解决为题。
3. 我们可以用类似双指针的方法,创建两个下标src和dest,通过前后元素的对比,若不同,则将dest位置上的元素覆盖掉src后一个的重复的元素,++dest;相同时,++dest
4. 举例,如图:

》src 和 dest上的元素相同,++dest
在这里插入图片描述

》不同时将dest位置上的元素覆盖掉src后一个的重复的元素,++dest
在这里插入图片描述

在这里插入图片描述
》相同时,++dest

在这里插入图片描述》不同时将dest位置上的元素覆盖掉src后一个的重复的元素,++dest

在这里插入图片描述

3. 🎈具体代码

//时间复杂度O(N)
int removeDuplicates(int* nums, int numsSize){
    int dest = 1;//下标
    int src = 0;
    while (dest < numsSize) // 因为 MAX_dest + 1 == numsSize
    {
        if (nums[src] != nums[dest])
        {
            // ++src;
            // nums[src] = nums[dest];
            // ++dest;
            nums[++src] = nums[dest++];
        }
        else
        {
            ++dest;
        }
    }
    return src + 1;

}

🎇总结

本篇文章我们解决了力扣上删除有序数组中的重复项这道题,感谢大家的阅读!大家一起进步!

点赞收藏加关注,C语言学习不迷路!
图片来源于网络

  • 18
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 23
    评论
评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值