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

leetcode——26. 删除有序数组中的重复项

在这里插入图片描述

文章目录

    • 🐨1. 题目
    • 🏹2. 思路
    • 🪃3. 代码实现

🐨1. 题目

给你一个升序排列的数组nums,请你原地删除重复出现的元素,使每个元素只出现一次,返回删除后数组的新长度。元素的相对顺序应该保持一致
由于在某些语言中不能改变数组的长度,所以必须将结果放在数组nums的第一部分。更规范地说,如果在删除重复项之后有k个元素,那nums的前k个元素应该保存最终结果。
将最终结果插入 nums 的前k个位置后返回k
不要使用额外的空间,你必须在原地修改输入数组 并在使用 O(1) 额外空间的条件下完成。

示例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 。不需要考虑数组中超出新长度后面的元素。

提示:

  • 1 <= nums.length <= 3 * 104
  • -104 <= nums[i] <= 104
  • nums 已按 升序 排列

🏹2. 思路

这里题目对空间复杂度做了要求,必须为 O(1) ,那么我们就不能开辟新的数组,只能在原数组上动手。题目还给出了一个条件——数组是有序的,这就意味着如果重复的元素一定是相邻的。
这样我们就可以考虑用双指针,因为要比较指向的内容是否相同,所以这里不能指向同一个位置,即我们设置一个前dst,一个后src
在这里插入图片描述

🪃3. 代码实现

注意
这个函数的返回值是去重后的数组长度。在函数执行的过程中,变量dst表示当前去重后的数组的最后一个元素的索引,因此实际上需要返回的是dst + 1。

int removeDuplicates(int* nums, int numsSize){int src = 1;int dst = 0;while(src<numsSize){if(nums[dst] != nums[src]){nums[++dst] = nums[src++];}else{src++;}}return dst+1;
}
http://www.lryc.cn/news/40792.html

相关文章:

  • 基于springboot垃圾分类网站设计实现【毕业论文、源码】
  • 计算机组成原理实验一(完整)
  • 【SSM】MyBatis(一.基础)
  • LInux指令之文件目录类
  • 【c++】:STL中vector的模拟使用及模拟实现
  • C++ STL:vector的使用方法及模拟实现
  • naive UI 的upload组件自定义手动上传图片的base64位
  • 信创办公–基于WPS的PPT最佳实践系列(表格和图标常用动画)
  • Spring Bean实例化和初始化的过程
  • WorkTool企微机器人接入智能问答
  • C导入正则库问题
  • 尚融宝05-Node.js入门
  • 「SAP ABAP」OPEN SQL(八)【WHERE语句大全】
  • Ribbon负载均衡的原理(源码分析)
  • 用sql计算两个经纬度坐标距离(米数互转)
  • C语言详解KMP算法
  • redis在window上安装与自启动
  • 字符串匹配【BF、KMP算法】
  • Leetcode.1616 分割两个字符串得到回文串
  • 剑指 Offer II 033. 变位词组
  • spring-cloud-sentinel ---流控算法---review
  • 1.浅析NIO 多路复用器selector
  • Day920.结构化日志业务审计日志 -SpringBoot与K8s云原生微服务实践
  • 前端代码复用学习笔记:整洁架构与清晰架构
  • 【python刷题】leecode官方提示“->“,“:“这些符号是什么意思?什么是Type Hints?
  • 【华为OD机试真题2023 JAVA】最佳对手
  • css实现文字大小自适应
  • 【Redis】搭建哨兵集群
  • CTFHub | .htaccess
  • 微机原理 || 8253 芯片 (详细讲解 + 经典例题)