LeetCode--80. 删除排序数组中的重复项Ⅱ(双指针,暴力)
删除排序数组中的重复项Ⅱ(C,Python)
- 1. 题目描述
- 2. 题目分析
- 3. C语言实现
- 4. Python实现
1. 题目描述
难度:中等
2. 题目分析
这道题是LeetCode–26. 删除排序数组中的重复项的进阶版,不过处理思路是一样的。根据题目,需要注意一下四点:
- 给定的输入数组是已经排好序的
- 需要在原地删除重复的元素,也就是说我们不可以在重新定义数组来存放结果,需要对原数组进行修改
- 返回的是修改之后数组的长度,而不是数组本身
- 不需要考虑数组中超出新长度后面的元素,也就是说,我们可以将原数组的前一部分更新为我们想要的结果,然后返回这部分的长度即可,不需要考虑着部分之后的元素是否也符合要求。举个例子:
a = [0,0,1,1,2,2,2,3] 修改之后的a=[0,1,2,3,2,2,3] 我们只需要返回长度为4的a即[0,1,2,3]这一部分就可以了。
有两种方法:
- 暴力求解法(Python)
所谓的暴力求解法就是依次遍历数组,如果该元素与相邻元素重复并且超过了2个,那么就将相邻的这个元素删除,如第4节所示。时间复杂度为O(n^2). - 双指针法(C)
我们可以放置两个指针 i和 j,其中 i 是慢指针,而 j 是快指针。只要 nums[i] = nums[j],我们就增加 j 以跳过重复项。
当我们遇到 nums[j] != nums[i]并且重复次数超过2次时,跳过重复项的运行已经结束,因此我们必须把它(nums[j])的值复制到 nums[i + 1]。然后递增 i,接着我们将再次重复相同的过程,直到 j 到达数组的末尾为止。如第3节所示, 时间复杂度为O(n)。
3. C语言实现
代码如下:
int removeDuplicates(int* nums, int numsSize){int i = 0, j, flag = 1;if(numsSize==0)return 0;for(j = 1; j < numsSize; j++){if (nums[i]==nums[j] && flag == 1){flag++;i++;nums[i] = nums[j];}else if(nums[i]!=nums[j]){i++;flag = 1;nums[i] = nums[j];}}return i+1;
}
运行结果为:
4. Python实现
代码如下:
class Solution:def removeDuplicates(self, nums: List[int]) -> int:i = 0flag = 1if len(nums) < 2: return len(nums)while(i != len(nums)-1):if nums[i] == nums[i+1]:if flag == 1:flag = 2i += 1else:del nums[i+1]else: i += 1flag = 1return len(nums)
运行结果为:
LeetCode--80. 删除排序数组中的重复项Ⅱ(双指针,暴力)相关推荐
- LeetCode 80. 删除排序数组中的重复项 II
1. 题目 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完 ...
- Leecode刷题【1数组专题4】80. 删除排序数组中的重复项II (以及通用解法)
Leecode刷题 [1数组专题4]80. 删除排序数组中的重复项II (以及通用解法) 题目: 思路 双指针法: (错误代码) 正解: 通用解法: 题目: 给你一个有序数组 nums ,请你 原地 ...
- 80. 删除排序数组中的重复项 II golang
80. 删除排序数组中的重复项 II 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O ...
- C++描述 LeetCode 26. 删除排序数组中的重复项
C++描述 LeetCode 26. 删除排序数组中的重复项 大家好,我叫亓官劼(qí guān jié ),在CSDN中记录学习的点滴历程,时光荏苒,未来可期,加油~博主目前仅在CSDN中写博客 ...
- LeetCode 79单词搜索80删除排序数组中的重复项Ⅱ81.搜索旋转排序数组Ⅱ
新人公众号(求支持):bigsai 专注于Java.数据结构与算法,一起进大厂不迷路! 算法文章题解全部收录在github仓库bigsai-algorithm,求star! 关注回复进群即可加入力扣打 ...
- leetcode 26 删除排序数组中的重复项
https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素 ...
- LeetCode 26. 删除排序数组中的重复项
1. 题目 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成 ...
- LeetCode(#26)————删除排序数组中的重复项
题目 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成. 示 ...
- 索引超出了数组界限_【每天一题】LeetCode 26. 删除排序数组中的重复项
开源地址 JiauZhang/algorithmsgithub.com 题目描述 * https://leetcode-cn.com/problems/remove-duplicates-from- ...
- 14. Leetcode 80. 删除有序数组中的重复项 II (数组-同向双指针-快慢指针)
给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 最多出现两次 ,返回删除后数组的新长度.不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条 ...
最新文章
- fiddler4 使用教程
- 可以预防新冠病毒的项链 -脉动
- 科普:算法岗是什么?我适不适合算法岗?选什么方向的算法岗?
- jdbc的预处理中如何处理模糊查询
- 用计算机求正有理数算术平方根的步骤,用计算器求算数平方根、用有理数估计算数平方根的大小.ppt...
- linux怎么运行g77,Linux安装g77编译器的技巧
- WSP (无线会话协议)
- C#LeetCode刷题,走进Google,走近人生
- 微软发布新版Silverlight 5 - 版本 5.1.10411.0
- Update Remote Files 1.0
- access mysql odbc驱动程序_access odbc驱动下载|
- android反编译工具推荐,Android 反编译工具的各种用法
- 3款堪称神器的电脑软件,简单又实用
- 苏宁大数据怎么运营_苏宁首个无人店大数据曝光,其消费人群是如何分布的?...
- 计算机是概念化不是程序化,走进计算思维
- 数据中台和数仓的关系
- 零基础学习Hadoop
- 高数——定积分计算大法之换元法
- linux下安装以太坊(ETH/ETC)节点
- 自媒体新人常见问题汇总-千氪
热门文章
- Redis的N种妙用,不仅仅是缓存
- 电平通讯速度_RS-485总线电平异常解决方案解析
- 爬虫-通过正则表达式爬取学校选课网站的课程
- javascript脚本语言_10分钟快速掌握Javascript核心特性
- linux 数据库 超出,[QAD]数据库超过2G,备份出现问题(linux)
- php中file对象实例,AJAX_File, FileReader 和 Ajax 文件上传实例分析(php),File FileReader 可以干什么? Ajax - phpStudy...
- 有了商城源码如何部署到本地服务器_怎么将本地做好的网站部署到服务器上?...
- cv_bridge 调用ros自带的opencv版本的解决
- 转载:GBDT算法梳理
- 那些查了无数遍的问题