C语言每日一题(21)删除排序数组中的重复项

力扣 26.删除排序数组中的重复项

题目描述

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

考虑 nums 的唯一元素的数量为 k ,你需要做以下事情确保你的题解可以被通过:

  • 更改数组 nums ,使 nums 的前 k 个元素包含唯一元素,并按照它们最初在 nums 中出现的顺序排列。nums 的其余元素与 nums 的大小不重要。
  • 返回 k

思路分析

基于双指针法,用下标进行代替,从数组最左端开始,遍历整个数组,下标1如果不等于下标2就把下标1指向的值赋给下标2,同时继续向后遍历完整个数组,最后返回下标2的值(即去重后数组的长度)

整体步骤

1.定义src下标和dest下标,dest从0开始

src从1开始(第一个不需要进行匹配)遍历整个数组,如果nums【src】不等于nums【dest】的就将src指向的值赋给dest(先++在赋值),同时定义一个计数器++(从1开始),最后返回count的值。

完整代码

复制代码
int removeDuplicates(int* nums, int numsSize){

    int src=0;

    int dest=0;

    int count=1;

    for(src=1;src<numsSize;src++)

    {

        if(nums[src]!=nums[dest])

        {

            nums[++dest]=nums[src];

            count++;

        }

    }

    return count;

}
相关推荐
为何创造硅基生物8 小时前
C语言 结构体内存对齐规则(通俗易懂版)
c语言·开发语言
吃好睡好便好8 小时前
在Matlab中绘制横直方图
开发语言·学习·算法·matlab
仰泳之鹅8 小时前
【C语言】自定义数据类型2——联合体与枚举
c语言·开发语言·算法
jolimark9 小时前
C语言自学攻略:小白入门三步走
c语言·编程入门·学习路线·实践项目·自学攻略
cen__y9 小时前
Linux12(Git01)
linux·运维·服务器·c语言·开发语言·git
社交怪人10 小时前
【算平均分】信息学奥赛一本通C语言解法(题号2071)
c语言·开发语言
x_yeyue10 小时前
三角形数
笔记·算法·数论·组合数学
卢锡荣11 小时前
单芯通吃,盲插标杆 —— 乐得瑞 LDR6020,Type‑C 全场景互联 “智慧芯”
c语言·开发语言·计算机外设
Mr. zhihao11 小时前
深入解析redis基本数据结构
数据结构·数据库·redis
念何架构之路11 小时前
Go语言加密算法
数据结构·算法·哈希算法