当前位置: 首页 > news >正文

第一期——LeetCode 26删除有序数组中的重复项

查看原题点击这里

题目

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

请以下列函数的形式实现操作,numsSize是数组nums的元素个数

int removeDuplicates(int* nums, int numsSize) {

}

示例 1:

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

示例 2:

输入:nums=[0,0,1,1,1,2,2,3,3,4]
输出:5,nums=[0,1,2,3,4]
解释:函数应该返回新的长度5,并且原数组 nums 的前五个元素被修改为0,1,2,3,4 。不需要考虑数组中超出新长度后面的元素。

我们首先会想到建立一个新的数组,把不重复的数字放到新的数组中,但是这样不符合题目空间复杂度为O(1)的要求,所以我们这里提供了一个双指针的方法作为参考。

思路

我们建立第一个指针变量src来遍历数组,同时建立第二个指针变量dst标记被保留下来的元素的位置,

先让dst指向第一个元素,标记第一个元素的位置,src指向dst的后一个元素,如果src指向的元素和dst指向的元素相同,那么src就跳过这个元素检查下一个,dst也不保留这个重复的元素的位置

如果src指向的元素与dst标记的元素不同,那么dst就+1指向数组的下一个位置,并把这个位置改为src指向的这个新的元素

这样重复直到src遍历结束,最后返回新数组的元素个数

最后用代码实现上述操作

代码:(C语言版本)

int removeDuplicates(int* nums, int numsSize) {
    int src=1;//src指向数组第二个元素,下标为1
    int dst=0;//dst指向数组的第一个元素,下标为0
    while(src<numsSize)
    {   
        if(nums[src]==nums[dst])
        {
            src++;
        }
        else
        {
            nums[++dst]=nums[src++];
                //将src指向的新的元素赋值给dst当前+1的位置,并src+1查找下一个元素
        }
    }
    return dst+1; //返回的时新数组的元素个数,dst是数组最后一个元素的下标
}

(持续更新,下期见)

相关文章:

  • Vulnhub中的Lupinone
  • Flutter:K线图
  • 鸿蒙(HarmonyOS)开发学习路线指南:从零到实战
  • Arduino IDE编程ESP32-C3的Flash选项
  • 轻松搭建本地大语言模型(一)Ollama安装与使用
  • 【进阶】redis篇
  • 组合模式详解(Java)
  • Linux nftables 命令使用详解
  • 基于JAVA毕业生信息招聘信息平台设计与实现
  • vllm专题(一):安装-GPU
  • 【开源免费】基于SpringBoot+Vue.JS个人博客系统(JAVA毕业设计)
  • 以下是一个使用 HTML、CSS 和 JavaScript 实现的登录弹窗效果示例
  • 什么是Spring Boot?
  • FreeRTOS-rust食用指南
  • Python程序打包 |《Python基础教程》第18章笔记
  • SQLAlchemy 中字段类型与常见数据库(MySQL、PostgreSQL 和 SQLite)的全面映射关系
  • 在VS中通过vcpkg包管理器来安装使用qt5
  • Win11网络受限问题解决方案
  • AWS CodeBuild 配置完整指南
  • 读书笔记 - 修改代码的艺术
  • 广西隆林突发山洪,致3人遇难1人失联
  • 视频丨歼-10CE首次实战大放异彩
  • 上海交大曾小勤:科技传播不应停留于知识搬运,要做科学思维的播种机
  • 河南一县政府党组成员签订抵制违规吃喝问题承诺书,现场交给县长
  • 流失79载,国宝文物“子弹库帛书”(二、三卷)回归祖国
  • 长三角体育节回归“上海时间”,首次发布赛事旅游推荐线路