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

LeetCode26. 删除有序数组中的重复项题解

LeetCode26. 删除有序数组中的重复项题解

题目链接:

https://leetcode.cn/problems/remove-duplicates-from-sorted-array

题目描述:

给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。考虑 nums 的唯一元素的数量为 k ,你需要做以下事情确保你的题解可以被通过:更改数组 nums ,使 nums 的前 k 个元素包含唯一元素,并按照它们最初在 nums 中出现的顺序排列。nums 的其余元素与 nums 的大小不重要。
返回 k 。示例:
输入: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 。不需要考虑数组中超出新长度后面的元素。

思路

以题目给出的示例而言,我们可以把数组分为两个部分:

前一部分是不重复的

后一部分是重复的,也就是该删除的。

我们可以定义快慢指针:

快慢指针的定义

[0,slow-1]代表值不重复的区域;

[slow,fast-1]代表值重复的区域;

[fast,n-1]代表未处理的区域。

循环逻辑

  1. 初始化快慢指针slow,fast,均初始化为1(注意:[0,slow-1]代表值不重复的区域,如果slow = 1[0,0]只有一个元素,肯定不重复,符合我们的规定);
  2. 如果nums[fast] 不等于 nums[slow - 1],说明遇到了不重复的元素,那么就把 nums[slow] 赋值为nums[fast],并把slow指针向后移动;
  3. fast指针向后移动

直到fast超出数组长度。

然后返回slow的值,就是所求数组长度。

代码如下:

class Solution {public int removeDuplicates(int[] nums) {int slow = 1,fast = 1;while (fast < nums.length) {if(nums[fast] != nums[slow - 1]){nums[slow] = nums[fast];slow++;}fast++;}return slow;}
}

相关文章:

  • 【Linux】基础IO_3
  • 【C++11】initializer_list详解!
  • NSSCTF-Web题目14
  • 前端 JS 经典:通用性函数封装思路
  • 常见的创建型设计模式( 一 )
  • 数据结构之探索“队列”的奥秘
  • vue elementui table给表格中满足条件的每一条记录添加计时器
  • 低代码平台框架:开源选型、实践与应用深度解析
  • C++拷贝构造函数、运算符重载函数、赋值运算符重载函数、前置++和后置++重载等的介绍
  • ThreadLocal的原理
  • 深入浅出简单工厂模式及其在 Spring 框架中的应用
  • 【专业英语 复习】第9章 Privacy, Security,and Ethics
  • 【Flask】学习
  • 丰臣秀吉-读书笔记六
  • 沙奇里再造世界波,容声注定与经典结缘
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • [deviceone开发]-do_Webview的基本示例
  • “Material Design”设计规范在 ComponentOne For WinForm 的全新尝试!
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • django开发-定时任务的使用
  • DOM的那些事
  • dva中组件的懒加载
  • Idea+maven+scala构建包并在spark on yarn 运行
  • Javascript编码规范
  • java中具有继承关系的类及其对象初始化顺序
  • JS 面试题总结
  • MYSQL 的 IF 函数
  • oldjun 检测网站的经验
  • php面试题 汇集2
  • Protobuf3语言指南
  • SSH 免密登录
  • 编写高质量JavaScript代码之并发
  • 番外篇1:在Windows环境下安装JDK
  • 基于axios的vue插件,让http请求更简单
  • 简单数学运算程序(不定期更新)
  • 爬虫模拟登陆 SegmentFault
  • 浅谈Golang中select的用法
  • 让你的分享飞起来——极光推出社会化分享组件
  • 硬币翻转问题,区间操作
  • 自制字幕遮挡器
  • 【干货分享】dos命令大全
  • const的用法,特别是用在函数前面与后面的区别
  • Unity3D - 异步加载游戏场景与异步加载游戏资源进度条 ...
  • ​Redis 实现计数器和限速器的
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • #[Composer学习笔记]Part1:安装composer并通过composer创建一个项目
  • #pragma data_seg 共享数据区(转)
  • $ git push -u origin master 推送到远程库出错
  • $LayoutParams cannot be cast to android.widget.RelativeLayout$LayoutParams
  • (10)STL算法之搜索(二) 二分查找
  • (20)docke容器
  • (31)对象的克隆
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (PySpark)RDD实验实战——求商品销量排行