【双指针】80. 删除排序数组中的重复项 II

2023-05-16

题目

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

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

示例 1:

给定 nums = [1,1,1,2,2,3],

函数应返回新长度 length = 5, 并且原数组的前五个元素被修改为 1, 1, 2, 2, 3 。

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

给定 nums = [0,0,1,1,1,1,2,3,3],

函数应返回新长度 length = 7, 并且原数组的前五个元素被修改为 0, 0, 1, 1, 2, 3, 3 。

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array-ii 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


与26题相似,同样使用双指针,只是该题加入了一个限制条件,每个元素最多出现两次,因此在移动指针时还需要考虑元素出现的次数。左指针i指向当前重复少于2次的元素的末尾,右指针j遍历数组,使用count(最小值为1)记录当前元素出现的次数。

  • j指向元素与i指向元素不同时说明有新元素,此时将其存到i+1处,并将指针i++,更新count=1表明当前j指向的元素出现次数为1.
  • 否则说明j指向元素与i指向元素相同,将count++,若count<=2则表明当前元素未出现大于2次,则将j指向的元素存到i+1处,并将i++
class Solution {
public:
	int removeDuplicates(vector<int>& nums) {
		if (nums.size() == 0) {
			return nums.size();
		}
		int i = 0;
		int count = 1;
		for (int j = 1; j < nums.size(); j++) {
			if (nums[j] != nums[i]) {
				nums[i + 1] = nums[j];
				i++;
				count = 1;
				continue;
			}
			else {
				count++;
				if (count <= 2) {
					nums[i + 1] = nums[j];
					i++;
				}
			}
		}
		return i + 1;
	}
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【双指针】80. 删除排序数组中的重复项 II 的相关文章

  • 【python】批量安装包以及导出项目依赖包requirement.txt

    批量安装需要的包 制作requirements txt并放置在对应目录下 输入命令pip install r path to requirements txt即可批量安装需要的包 为当前的Python项目生成依赖包清单requirement
  • 训练yolov3loss为nan

    之前遇到过图片的目标普遍比较小 xff0c 且图片大小是1024x1024 xff0c 因此将其resize到416x416后box只有0 几 xff0c loss在一开始就为nan xff0c 后来把resize大小改大就可以正常训练了
  • 集成学习--Stacking

    参考 集成学习主要分为 bagging xff0c boosting 和 stacking方法 stacking过程如下图 xff0c 首先在训练集上训练m个基分类器 xff08 或回归器 xff09 xff0c 这m个分类器输出的预测结果
  • 【pandas】提取符合条件的行

    在使用多个条件对行进行过滤时用 amp 符号连接多个条件 xff0c 且务必确保每个条件用括号括起来 xff0c 否则会出错 TypeError span class token punctuation span cannot compar
  • 【pandas】replace批量替换

    replace函数的参数为 xff1a to replace 需要替换的值value 替换后的值inplace 是否改变原来的dataframe xff0c 若为False则返回一个copy xff0c 若为True则修改原来的datafr
  • svn linux

    一 检查Svn安装版本 xff1a svn version 结果为 root 64 iZm5e9ujl2isnk0qfeeyyhZ svn version svn version 1 7 14 r1542130 compiled Apr 1
  • 【pandas】reset_index()

    该函数将原来的index作为dataframe的一个列 xff0c 生成一个新的索引 xff08 0 xff0c 1 xff0c 2 xff09 xff0c 一个简单的例子 span class token keyword import s
  • 【PIL】将数组转换为图像并保存

    参考自 span class token keyword from span PIL span class token keyword import span Image im span class token operator 61 sp
  • 【python】join连接字符串

    join函数用于将序列中的元素以指定字符串连接在一起 xff0c 例如 span class token builtin str span span class token operator 61 span span class token
  • 【python】复制文件

    span class token keyword import span shutil shutil span class token punctuation span copyfile span class token punctuati
  • 【pandas】merge和join

    merge和join都是将不同的dataframe进行合并 xff0c 区别在于merge是通过key将frame合并 xff0c 而join通过index进行合并 merge 两个frame必须要有同一种属性可以作为键值 xff0c 如下
  • 【python】画图保存为emf

    emf为矢量图 xff0c 是office支持的格式 xff0c python不能直接保存为emf xff0c 首先保存为svg格式 xff0c 如下 span class token keyword import span matplot
  • 【seaborn】绘制概率密度估计图

    span class token keyword import span seaborn span class token keyword as span sns plt span class token punctuation span
  • 【C++】Socket通信例子

    创建两个工程文件 xff0c Server和Client 服务器模板代码 span class token macro property span class token directive keyword include span spa
  • 【STL】map基本用法

    C 43 43 中的map类似于python中的字典 xff0c 形如 lt key value gt 对 创建map对象 可以像python中的字典一样直接使用IDMPA key 获取对应的值 span class token macro
  • 【string】字符串拷贝strcpy

    strcpy即string copy span class token keyword char span span class token operator span str span class token operator 61 sp
  • web控件开发

    https www bbsmax com A gGdX6v11J4 https open chrome 360 cn extension dev overview html 扩展示例 Mozilla MDN https edge micro
  • 【string】获取字符串长度strlen

    span class token keyword char span str span class token punctuation span span class token punctuation span span class to
  • 【string】int转string to_string

    使用to string函数将整型变量转为字符串 span class token keyword int span n span class token operator 61 span span class token number 10
  • 【C++】string、char*互相转换

    string 2 char c str 方法返回一个const char 类型的指针变量 xff0c 使用strcpy函数copy string str span class token operator 61 span span clas

随机推荐

  • 【string】字符串分割strock

    使用strock将字符串按特定分隔符分割 span class token macro property span class token directive keyword include span span class token st
  • 【string】字符串转int stoi

    使用stoi函数将字符串转为int型 xff0c 需要 include lt string gt span class token keyword char span chs span class token punctuation spa
  • Visual Studio解决const char *与LPCWSTR 不兼容

    项目 gt 属性 gt 配置属性 gt 高级 xff0c 将字符集改为未设置
  • 【C++】文件读写指针定位

    主要函数 xff1a 指针定位函数SetFilePointer xff0c 读文件ReadFile xff0c 写文件WriteFile 首先使用CreateFile创建文件 xff0c SetFilePointer函数将指针定位到文件指定
  • 【C++】程序计时

    span class token macro property span class token directive keyword include span span class token string lt iostream gt s
  • 【双指针】15.三数之和

    题目 给你一个包含 n 个整数的数组 nums xff0c 判断 nums 中是否存在三个元素 a xff0c b xff0c c xff0c 使得 a 43 b 43 c 61 0 xff1f 请你找出所有满足条件且不重复的三元组 注意
  • 函数定义中的冒号和箭头

    函数中变量后面加冒号和类型表示该参数的建议类型 xff0c 如下参数A的建议类型是int xff0c 参数B的建议类型是str xff0c gt 表示该函数的返回值类型 xff0c 例如fun函数的返回值类型是str span class
  • chrom控件命令行加载

    34 C Users lt name gt AppData Local Google Chrome Application chrome exe 34 load extension 61 34 lt path to unpacked ext
  • 【二叉树】创建、先序遍历、中序遍历、后序遍历、层序遍历 Java实现

    二叉树的创建 二叉树的创建可以采用递归方式 xff0c 传入一个数组 xff0c 例如数组 3 9 20 null null 15 7 表示的二叉为 span class token number 3 span span class tok
  • 【二叉树】平衡二叉树

    平衡二叉树是一种二叉查找树又称为AVL树 Adelsen Velskii and Landis xff0c 特点为每个节点的左 右子树深度之差的绝对值不大于1 xff0c 左子树的值小于右子树 xff0c 重要操作为插入和删除 插入 插入新
  • win10搭建hadoop2.7.7

    配置java环境 配置java环境 xff0c 官网下载jdk较慢 xff0c 百度网盘 xff1a 链接 xff1a https pan baidu com s 1wX7LxPMjcS9QGc4c4cPJgw 提取码 xff1a 9e38
  • win10配置spark

    下载spark压缩包 xff0c 链接 xff1a https pan baidu com s 1y5JlMdtkrZFyTJWKtuuZ Q 提取码 xff1a z64y 解压tar gz文件 配置环境变量 xff0c 系统变量Path中
  • 【HDFS】上传、查看、下载、删除文件命令

    上传 首先启动HDFS xff0c 任意目录下输入命令start dfs xff08 若没有配置sbin的环境变量则需要在sbin目录下打开cmd输入该命令 xff09 xff0c 出现以下两个框框 在需要上传文件的文件路径下打开cmd命令
  • IntelliJ IDEA开发spark应用(scala)

    配置spark环境 xff0c 可参考官网下载 IntelliJ IDEA xff0c 然后安装 xff0c 一直next即可 安装Scala插件 创建一个新工程 Ctrl 43 Shift 43 Alt 43 s xff0c 导入spar
  • 【STL】vector简单使用

    参考 需要头文件 span class token macro property span class token directive keyword include span span class token string lt iost
  • 【python效率优化】使用map优化for循环

    python提供的高级函数map将一个函数作用于可迭代对象的每一个元素 xff0c 底层自动实现并行 xff0c 运行速度比for循环要快 xff0c 对于无前后联系的for循环 xff0c 可以使用map进行优化 xff0c 以下例子对比
  • 【数组】121. 买卖股票的最佳时机

    题目 给定一个数组 xff0c 它的第 i 个元素是一支给定股票第 i 天的价格 如果你最多只允许完成一笔交易 xff08 即买入和卖出一支股票一次 xff09 xff0c 设计一个算法来计算你所能获取的最大利润 注意 xff1a 你不能在
  • 【双指针】26. 删除排序数组中的重复项

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

    到网页 https www google cn chrome 点击安装 下载 rpm安装包 安装即可 root 64 localhost 下载 yum localinstall google chrome stable current x8
  • 【双指针】80. 删除排序数组中的重复项 II

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