删除排序数组中的重复项(C, Python)

  • 1. 题目描述
  • 2. 题目分析
  • 3. C语言实现
    • 3.1 暴力求解法
    • 3.2 双指针法
  • 4. Python语言实现

1. 题目描述

难度:简单

2. 题目分析

根据题目,需要注意一下四点:

  • 给定的输入数组是已经排好序
  • 需要在原地删除重复的元素,也就是说我们不可以在重新定义数组来存放结果,需要对原数组进行修改
  • 返回的是修改之后数组的长度,而不是数组本身
  • 不需要考虑数组中超出新长度后面的元素,也就是说,我们可以将原数组的前一部分更新为我们想要的结果,然后返回这部分的长度即可,不需要考虑着部分之后的元素是否也符合要求。举个例子:
    a = [0,0,1,1,2,2,2,3] 修改之后的a=[0,1,2,3,2,2,3] 我们只需要返回长度为4的a即[0,1,2,3]这一部分就可以了。

有两种方法:

  • 暴力求解法
    所谓的暴力求解法就是依次遍历数组,如果该元素与相邻元素重复,那么就将相邻的这个元素删除,如3.1节所示。
  • 双指针法
    双指针法数组完成排序后,我们可以放置两个指针 i和 j,其中 i 是慢指针,而 j 是快指针。只要 nums[i] = nums[j],我们就增加 j 以跳过重复项。
    当我们遇到 nums[j] != nums[i]时,跳过重复项的运行已经结束,因此我们必须把它(nums[j])的值复制到 nums[i + 1]。然后递增 i,接着我们将再次重复相同的过程,直到 j 到达数组的末尾为止。如3.2节所示

3. C语言实现

3.1 暴力求解法

源代码如下:

// 移除指定下标的数组中的元素
// nums为目标数组,numsSize为数组长度,index为要删除的元素的下标
int* removeSingle(int *nums, int numsSize, int index){int i;for(i = 0; i < numsSize-1; i++){if(i >= index){nums[i] = nums[i+1];}}return nums;
}int removeDuplicates(int* nums, int numsSize){int i;// 遍历数组for(i = 0; i < numsSize-1; i++){// 如果数组中相邻两个元素相等,将相邻的元素删除掉if(nums[i] == nums[i+1]){nums = removeSingle(nums, numsSize, i+1);i--;numsSize--;}}return numsSize;
}

运行结果为:

3.2 双指针法

代码如下:

int removeDuplicates(int* nums, int numsSize){if (numsSize == 0) return 0;int i = 0;for (int j = 1; j < numsSize; j++) {if (nums[j] != nums[i]) {i++;nums[i] = nums[j];}}return i + 1;
}

运行结果为:

4. Python语言实现

Python语言实际上与暴力求解法类似,只是写起来比较简单:

class Solution:def removeDuplicates(self, nums: List[int]) -> int:i = 0while(i != len(nums)):if nums[i] in nums[i+1:]:del nums[i]else: i += 1return len(nums)

运行结果为:

可以发现,双指针法比暴力求解法快十倍不止。

LeetCode--26. 删除排序数组中的重复项(双指针,暴力)相关推荐

  1. C++描述 LeetCode 26. 删除排序数组中的重复项

    C++描述 LeetCode 26. 删除排序数组中的重复项   大家好,我叫亓官劼(qí guān jié ),在CSDN中记录学习的点滴历程,时光荏苒,未来可期,加油~博主目前仅在CSDN中写博客 ...

  2. leetcode 26 删除排序数组中的重复项

    https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素 ...

  3. LeetCode 26. 删除排序数组中的重复项

    1. 题目 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成 ...

  4. LeetCode(#26)————删除排序数组中的重复项

    题目 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成. 示 ...

  5. 索引超出了数组界限_【每天一题】LeetCode 26. 删除排序数组中的重复项

    开源地址 JiauZhang/algorithms​github.com 题目描述 * https://leetcode-cn.com/problems/remove-duplicates-from- ...

  6. LeetCode 26.删除排序数组中的重复项

    原题 标签  : 数组  重复元素  有序  双指针 快慢指针 解题思路: 1.判断数组是否为空,为空返回0 2.我们可以放置两个指针 ,其中 k 是慢指针,用来存下所有不同的数,而 j 是快指针用来 ...

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

    一.思路: nowPos当前第几个没有重复的数,count指向第nowPos+1个重复数的位置 二.C++ int removeDuplicates(vector<int>& nu ...

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

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

  9. ios 数组中的字典排序_题解 | 26.删除排序数组中的重复项

    假设我们有一个传感器,会不停地向 HQ 传输已经归类好数据,数据的格式全部是数字(种类编号),且已经按照从小到大的顺序排列,大概是 [1,1,4,5,7,9] 这样的,但是我们的需求在于,希望知道有多 ...

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

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

最新文章

  1. 命名实体识别学习笔记——使用Ltp
  2. Redis为什么这么快?一文深入了解Redis内存模型!
  3. 一个包从服务器到达客户端
  4. python csv读取-python如何读取csv数据
  5. 极简数据分析实操指南(下)
  6. ASP.NET Core Razor生成Html静态文件
  7. 数mysql据分析优化_从零开始学习数据分析-mysql架构与优化理论
  8. 离开载具_迷你世界 自制火箭试飞成功 飞行载具不负众望
  9. BUU OJ 做题记录
  10. Linux vi的复制和粘贴快捷键
  11. python函数执行顺序_python下for循环接if判断的函数执行顺序
  12. php粉层,thinkphp 模型分层
  13. java word搜索_java 实现word 文档的在线编辑. 以及全文关键字搜索和高亮显示
  14. video.js在react中实现视频播放(video.js)
  15. Oracle如何导出存储过程
  16. 每个产品经理都应该了解的5大技术技能
  17. 美通社企业新闻汇总 | 2019.3.7 | 百胜中国在上海设创新中心;折叠手机2019年预计仅占智能手机市场渗透率0.1%...
  18. 5种经典程序化日内交易策略
  19. c语言写抢QQ红包软件,Android实现QQ抢红包插件
  20. 品牌国际传播第一步:谁是最重要的人?| 直播活动预告

热门文章

  1. linux 好用的 免费的 数据库管理工具 dbeaver
  2. 计算机一级office考试题库及答案,2016下半年计算机一级msoffice考试试题及答案
  3. Linux 删除权限 umask,linux中的umask控制文件或目录的默认权限
  4. 最详细的SSD论文笔记
  5. 虚拟机的磁盘扩大超过2T,发现超过2T的这部分无分区
  6. Linux下超大硬盘分构(GPT分区)
  7. linux下拨号时间,linux下拨号上网
  8. plotly包安装_Plotly(一)安装指南
  9. TypeScript完全解读(26课时)_14.ES6和Nodejs中的模块
  10. Swift-类、结构体、枚举