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

力扣26:删除有序数组中的重复项

26. 删除有序数组中的重复项 - 力扣(LeetCode)

题目:

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

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

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

解题思路:

1. 原地删除  双引用思想:指针 fir、sec

2. 步骤解析:

(1)fir==sec,指向数组首元素

(2) sec向后移动,如果碰见与fir指向元素不相同的位置,此时fir进行移动。

这一步骤可以理解为:数组中的[0,fir]区间内存放的是不重复的元素,而sec就是负责去找不重复的元素的。一旦找到,fir就得在区间内为这个元素开辟空间,即fir++;

无论是否碰见重复元素,sec引用指针是一直往后移动的;

fir指向的元素就是删除后有效的最后一个元素,最后的有效元素个数就是fir指向的索引+1。

代码实现:

public int RemoveArrayElements(int[] nums){int fir=0,sec=0;//sec移动到元素的末尾,此时fir就指向最后一个不重复的元素//nums[0,fir]区间均为不重复元素while(sec<nums.length){if(nums[fir]!=nums[sec]){fir+=1;nums[fir]=nums[sec];}sec++;}return fir+1;}

思考:如果删除所有重复元素,如何进行改进?

http://www.lryc.cn/news/175371.html

相关文章:

  • 基于C#的AE二次开发之IQueryFilter接口、ISpatialFilter接口、IQueryDef 接口的查询接口的介绍
  • Oracle 11g RAC部署笔记
  • Redis 字符串操作实战(全)
  • python LeetCode 88 刷题记录
  • 基于 Socket 网络编程
  • 关于C#.Net网页跳转的7种方法
  • 使用acme.sh申请免费ssl证书(Cloudflare方式API自动验证增加DNS Record到期证书到期自动重新申请)
  • 【C语言】进阶——结构体+枚举+联合
  • Socket编程基础(1)
  • 无线通信——Mesh自组网的由来
  • LRU、LFU 内存淘汰算法的设计与实现
  • 常用工具使用
  • HashMap源码解析_jdk1.8(一)
  • Android最好用的日志打印库(自动追踪日志代码位置)
  • 面试官的哪些举动,暗示你通过了面试?
  • ​旅行季《乡村振兴战略下传统村落文化旅游设计》许少辉八一新著想象和世界一样宽广
  • Linux学习第19天:Linux并发与竞争实例: 没有规矩不成方圆
  • Unity添加自定义菜单按钮
  • PHP8的类与对象的基本操作之类的实例化-PHP8知识详解
  • C/S架构学习之TCP服务器
  • 基于微信小程序的线上教育课程付费商城(源码+lw+部署文档+讲解等)
  • Linux基础指令(五)
  • C语言结构体的一些鲜为人知的小秘密
  • kubernetes问题(一)-探究Pod被驱逐的原因及解决方法
  • 论文速览【序列模型 seq2seq】—— 【Ptr-Net】Pointer Networks
  • Denoising diffusion implicit models 阅读笔记
  • 【Java 基础篇】Executors工厂类详解
  • SpringBoot MongoDB操作封装
  • PyTorch 模型性能分析和优化 — 第 1 部分
  • Unity3D 简易音频管理器