原题描述

+

给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。

不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。

示例 1:

给定数组 nums = [1,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。

你不需要考虑数组中超出新长度后面的元素。

说明:

为什么返回数值是整数,但输出的答案是数组呢?

请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。

你可以想象内部操作如下:

// nums 是以“引用”方式传递的。也就是说,不对实参做任何拷贝int len = removeDuplicates(nums);

// 在函数里修改输入数组对于调用者是可见的。// 根据你的函数返回的长度, 它会打印出数组中该长度范围内的所有元素。for (int i = 0; i < len; i++) {print(nums[i]);}

原题链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array

思路解析

+

在必须原地修改输入数组的限定条件下,我们的思路就是不断地将数组的后部向前部挪动。因为是排好序的数组,所以重复的数字必然连着出现。为了消除重复,每次挪动只需要让后面独一无二的数字覆盖前面具有重复属性的数字位置即可。这里使用双指针的思路,暂且分别称为快指针和慢指针,令快指针不断向后探索,直到它指向了与慢指针不相等的数字时停止。此时通过将快指针指向的值覆盖到慢指针上的位置,就可以消除一个重复数字。

当快指针完成遍历时,慢指针指向的位置就是整个去重后的数组的末尾,后面的数值都可以舍掉了。

复杂度分析

+

  • 时间复杂度:

  • 空间复杂度:

计算步骤

+

1.初始化快慢指针

2. 移动快慢指针时,快指针必须指向与慢指针不同的值,然后进行assign

3.后移,并继续assign

4.完成,返回长度

C++参考代码

+

class Solution {

讲技术,也谈风月,更关注程序员的生活状况,欢迎联系二少投稿你感兴趣的话题。

c++删除数组中重复元素_LeetCode题目26:删除排序数组中的重复项相关推荐

  1. vector删除第i个元素_LeetCode每日一题 Q215数组中的第K个最大元素

    Question 215: Kth Largest Element in an Array Difficulty: Medium 题目描述 在未排序的数组中找到第 k 个最大的元素.请注意,你需要找的 ...

  2. 【LeetCode】重复元素相关题目

    [LeetCode]重复元素相关题目 文章目录 [LeetCode]重复元素相关题目 存在重复元素★ 存在重复元素 II★ 存在重复元素 III★★ 重复 N 次的元素★ 寻找重复数★★ 存在重复元素 ...

  3. java基础—自定义一个比较器,对TreeSet 集合中的元素按指定方法来排序(java集合六)

    自定义一个比较器,对TreeSet 集合中的元素按指定方法来排序 import java.util.Comparator; import java.util.Iterator; import java ...

  4. 去掉数组最后一个元素_leetcode 34. 在排序数组中查找元素的第一个和最后一个位置每天刷一道leetcode算法系列!...

    作者:reed,一个热爱技术的斜杠青年,程序员面试联合创始人 前文回顾: leetcode1. 两数之和--每天刷一道leetcode系列! leetcode2. 两数相加--每天刷一道leetcod ...

  5. 动态数组,数组初始化,数组内存释放,向数组中添加一个元素,向数组中添加多个元素,数组打印,顺序查找,二分查找,查找数组并返回地址,冒泡排序,改变数组中某个元素的值,删除一个数值,删除所有,查找含有

     1定义接口: Num.h #ifndef_NUM_H_ #define_NUM_H_ #include<stdio.h> #include<stdlib.h> /**** ...

  6. js判断数组中重复元素并找出_javascript查找数组中重复元素的方法

    这篇文章主要介绍了JS查找数组中重复元素的方法,结合具体实例形式对比分析了javascript针对数组的遍历.判断.排序等相关操作技巧,需要的朋友可以参考下 本文实例讲述了JS查找数组中重复元素的方法 ...

  7. JavaScript - 根据指定下标删除数组中的元素(支持二维对象数组)

    前言 网上的大部分方法及原生 splice 都存在一定的问题,本文做一个函数封装,传入数组及下标即可自动完成移除. 很多时候,我们需要移除指定下标的数组元素, 例如我有一个数组 ['A', 'B'] ...

  8. python列表删除多个相同元素_Python遍历列表删除多个元素或者重复元素

    在遍历list的时候,删除符合条件的数据,结果不符合预期 num_list = [1, 2, 2, 2, 3] print(num_list) for item in num_list: if ite ...

  9. 删除指定下标的元素c语言,PHP删除数组中指定下标的元素方法

    1.前面有讲数组作为堆栈和队列时的删除元素操作,即按顺序有规律的进行删除.那么,如果需要从数组的中间位置删除某个元素该如何操作呢?就需要我们今天要讲的unset()函数了. 2.unset()函数允许 ...

最新文章

  1. Vector Clock理解
  2. spring指导的index.html在spring文件夹中的位置
  3. 215. 数组中的第K个最大元素 BFPRT最牛解法
  4. 这个结构体对齐输出有意思
  5. php 织梦模板 防盗,dedecms 软件下载频道防盗链php代码
  6. r语言 读取dta_R语言与计量经济学(三)异方差
  7. 关于JVM内存的N个问题
  8. Unity3D 4.x怎样实现动画的Ping Pong效果
  9. python学习--关注容易被忽略的知识点--(二)函数
  10. 各种隐藏WebShell、创建、删除畸形目录、特殊文件名的方法
  11. 机器人操作系统ROS(一):发布接收消息
  12. hyperterminal停止工作_hyper terminal超级终端最新下载
  13. 计算机接口74LS138,用74ls138设计全加器
  14. 百度×TCL丨鸿鹄语音芯片首次在家电行业量产!
  15. 鉴源丨车载ECU嵌入式设备的诊断测试 - 会话和安全控制
  16. 如何将一个HTML页面嵌套在另一个页面中
  17. Linux 删除文件实现回收站功能
  18. 中国修边压力机行业市场供需与战略研究报告
  19. java实现凯撒密码_凯撒密码--java实现
  20. dom4j实例 带注释

热门文章

  1. 关于@media不生效的问题和meta总结
  2. 4个数之和 4Sum II
  3. PHP-FPM,Nginx,FastCGI 之间的关系
  4. 将代码提交到码云步骤
  5. 23_触发器_库存与订单实战
  6. 《CLR Via C# 第3版》笔记之(二十一) - 异步编程模型(APM)
  7. 软件开发人员,自身素质应该注意的问题!
  8. 华为机试HJ108:求最小公倍数
  9. html 环形进度条,详解利用canvas实现环形进度条的方法
  10. 昆仑通态如何连接sqlserver数据库_三菱FX5U 与昆仑通态触摸屏的连接操作步骤