删除排序数组中的重复项

  • 前言
    • 1.什么是数组
    • 2.数组双指针法
    • 3.LeetCode题目
    • 4.解法
    • 5.代码实现
  • 总结

前言

1.什么是数组

所谓数组,是有序的元素序列。 若将有限个类型相同的变量的集合命名,那么这个名称为数组名。

组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。

用于区分数组的各个元素的数字编号称为下标。数组是在程序设计中,为了处理方便, 把具有相同类型的若干元素按无序的形式组织起来的一种形式。

这些无序排列的同类数据元素的集合称为数组。

数组是用于储存多个相同类型数据的集合。

2.数组双指针法

给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。

不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。

元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素

代码:

例如:
输入:nums = [3,2,2,3], val = 3
输出:2, nums = [2,2]
解释:函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。你不需要考虑数组中超出新长度后面的元素。例如,函数返回的新长度为 2 ,而 nums = [2,2,3,3] 或 nums = [2,2,0,0],也会被视作正确答案。

思路
使用双指针法(快慢指针法):通过一个快指针和慢指针在一个for循环下完成两个for循环的工作。

删除过程如下:

3.LeetCode题目

给你一个 升序排列 的数组 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 。不需要考虑数组中超出新长度后面的元素。

4.解法

我的通俗理解:
其实可以看作一个喜新厌旧的人的一个排队列过程。这个人比较喜新厌旧,看到没有见过的数字,就把它按顺序从左到右排好,如果是已经见过的数字就直接忽略掉。 比如0 4 4 7 7 7 9 第一个数字保持不动。 然后往后面看看到第一个4,没见过,是第一次看到4,于是把它排到0的后面。 再往后看,又看到一个数字4,老面孔直接忽略掉。 再往后看看到一个数字7,是新面孔。于是把她拉到最左边,放在紧跟着0 4的位置。 再往后看是7,直接忽略,接着又是7,直接忽略。 直到看到新的数字9,然后把然后把放到0 4 7的后面。 可以理解为左边是所有的新面孔的队列,而快指针就是评审官,负责找到新面孔。

5.代码实现

  <script>var removeDuplicates = function(nums) {var n = nums.length;if (n === 0) {return 0;}var left = 0;for (var right = 1; right < nums.length; right++) {if (nums[left] != nums[right]) {nums[left + 1] = nums[right];left++;}continue;}nums.splice(left + 1, right - left);return left + 1;}var t = removeDuplicates([0, 0, 1, 1, 1, 2, 2, 3, 4]);console.log(t);</script>

总结

双指针解决
使用两个指针,右指针始终往右移动,如果右指针指向的值等于左指针指向的值,左指针不动。如果右指针指向的值不等于左指针指向的值,那么左指针往右移一步,然后再把右指针指向的值赋给左指针。

JavaScript删除排序数组中的重复项相关推荐

  1. 【每日一算法】删除排序数组中的重复项

    微信改版,加星标不迷路! 每日一算法-删除排序数组中的重复项 作者:阿广 阅读目录 ? 题目 ? 解析 ? 完整代码 1 题目 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次 ...

  2. LeetCode题组:第26题-删除排序数组中的重复项

    1.题目:删除排序数组中的重复项 给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度.(注意这里提到了排序数组,也就是说数组是有序的.如果无序,我们又 ...

  3. LeetCode 25K 个一组翻转链表26删除排序数组中的重复项

    如果问题或者其他方法还请分享,如加入打卡微信搜索bigsai回复进群一起打卡. K个一组翻转链表 题目要求 给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表. k 是一个正整数,它的值小 ...

  4. leetcode初级算法1.删除排序数组中的重复项

    leecode初级算法1.删除排序数组中的重复项 仅为个人刷题记录,不提供解题思路 题解与收获 class Solution {public int removeDuplicates(int[] nu ...

  5. vue删除数组中的一条数据_删除排序数组中的重复项 II

    删除排序数组中的重复项 II题目 给定一个增序排列数组 nums ,你需要在 原地 删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在 原地 修改 ...

  6. 80. 删除排序数组中的重复项 II golang

    80. 删除排序数组中的重复项 II 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O ...

  7. 26. 删除排序数组中的重复项 golang

    26. 删除排序数组中的重复项 给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 ...

  8. [LeetCode][Python][C#]刷题记录 26. 删除排序数组中的重复项

    这道题我真的纠结好久,因为没注意那个原地的题目要求,所以很奇怪怎么我电脑运行成功,但是LeetCode上运行就是不对.气哭. 感谢群友lino的帮助.他试了set方法不行,直接喂给我的答案了... 题 ...

  9. LeetCode--80. 删除排序数组中的重复项Ⅱ(双指针,暴力)

    删除排序数组中的重复项Ⅱ(C,Python) 1. 题目描述 2. 题目分析 3. C语言实现 4. Python实现 1. 题目描述 难度:中等 2. 题目分析 这道题是LeetCode–26. 删 ...

最新文章

  1. 如何高效地爬取链家的房源信息(二)
  2. hive定时清洗至mysql_hive,sqoop定时执行脚本举例
  3. 程序世界的秘密(中)
  4. python 模拟浏览器下载文件-python爬虫:使用Selenium模拟浏览器行为
  5. Node.js流,这样的打开方式对不对!
  6. hbase 协处理器 部署_hbase中安装和删除observer协处理器
  7. oracle里的查询转换
  8. excel判断字符串包含另一个字符串_【前端冷知识】如何正确判断一个字符串是数值?...
  9. 【jetson nano】 aarch64安装pycharm pytorch cuda
  10. 报错:The type javax.servlet.http.HttpServletRequest cannot be resolved
  11. 华为服务器sn号查询网站,linux 查询服务器sn
  12. ubuntu16.04下安装opencv3.2版本
  13. java冒泡排序经典代码6_经典排序算法之冒泡排序
  14. Spring with Hibernate persistence and transactions
  15. 中年人需要写个遗嘱吗?
  16. 菜鸟也要懂点设计模式|用Python设计一个请假模式
  17. 关于WPF 引用字体文件无效果的相关问题
  18. unity蛮牛游戏API
  19. 使用MATLAB工具箱TOOLBOX_calib标定摄像头过程(双目标定)
  20. 13级计算机商务沟通与礼仪结课论文,商务沟通论文

热门文章

  1. Ubuntu18.04 键盘输入的汉字和拼音都成了藏文解决办法
  2. Netflix 公司考古
  3. Android P/Q/R 版本快速制作recovey.img
  4. 初始C语言前4/13
  5. 【Nginx学习】Nginx代理mysql数据库
  6. php网站可视化编辑软件,适用于PHP的可视化HTML编辑器推荐
  7. oracle中主键和唯一索引的区别说明
  8. 宏基正版系统恢复系统和重装
  9. Python学习之生成带logo背景图的二维码(静态和动态图)
  10. 做程序员久了。大家有没感觉自己的感情渐渐淡了?