当前位置: 首页 > news >正文

[leetcode经典算法题]删除有序数组中的重复项(双指针)

删除有序数组中的重复项

给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。

考虑 nums 的唯一元素的数量为 k ,你需要做以下事情确保你的题解可以被通过:

更改数组 nums ,使 nums 的前 k 个元素包含唯一元素,并按照它们最初在 nums 中出现的顺序排列。nums 的其余元素与 nums 的大小不重要。
返回 k 。
判题标准:

系统会用下面的代码来测试你的题解:

int[] nums = […]; // 输入数组
int[] expectedNums = […]; // 长度正确的期望答案

int k = removeDuplicates(nums); // 调用

assert k == expectedNums.length;
for (int i = 0; i < k; i++) {
assert nums[i] == expectedNums[i];
}
如果所有断言都通过,那么您的题解将被 通过。

示例 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 。不需要考虑数组中超出新长度后面的元素。

class Solution {
public:int removeDuplicates(vector<int>& nums) {int left = 0 ;for(int right = 0;right < nums.size(); ++right){if(nums[right] != nums[left]){nums[++left]=nums[right];}}return left+1;}
};

删除有序数组中的重复项 II

给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使得出现次数超过两次的元素只出现两次 ,返回删除后数组的新长度。

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

说明:

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

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

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

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

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

示例 1:

输入:nums = [1,1,1,2,2,3]
输出:5, nums = [1,1,2,2,3]
解释:函数应返回新长度 length = 5, 并且原数组的前五个元素被修改为 1, 1, 2, 2, 3。 不需要考虑数组中超出新长度后面的元素。
示例 2:

输入:nums = [0,0,1,1,1,1,2,3,3]
输出:7, nums = [0,0,1,1,2,3,3]
解释:函数应返回新长度 length = 7, 并且原数组的前七个元素被修改为 0, 0, 1, 1, 2, 3, 3。不需要考虑数组中超出新长度后面的元素。

提示:

1 <= nums.length <= 3 * 104
-104 <= nums[i] <= 104
nums 已按升序排列

class Solution {
public:int removeDuplicates(vector<int>& nums) {int size =nums.size();if(size <= 2)return size;int slow = 2;int fast = 2;while(fast < size){if(nums[slow-2] != nums[fast] ){nums[slow++] = nums[fast];}fast++;}return slow;}
};

相关文章:

[leetcode经典算法题]删除有序数组中的重复项(双指针)

删除有序数组中的重复项 给你一个 非严格递增排列 的数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使每个元素 只出现一次 &#xff0c;返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。 考虑 nums 的唯一元素…...

【国产MCU】-CH32V307-触摸按键检测(TKEY)

触摸按键检测(TKEY) 文章目录 触摸按键检测(TKEY)1、TKEY介绍2、TKEY使用实例触摸检测控制(TKEY)单元,借助ADC 模块的电压转换功能,通过将电容量转换为电压量进行采样,实现触摸按键检测功能。检测通道复用ADC 的16 个外部通道,通过ADC 模块的单次转换模式实现触摸按键…...

Hive的小文件问题

目录 一、小文件产生的原因 二、小文件的危害 三、小文件的解决方案 3.1 小文件的预防 3.1.1 减少Map数量 3.1.2 减少Reduce的数量 3.2 已存在的小文件合并 3.2.1 方式一&#xff1a;insert overwrite (推荐) 3.2.2 方式二&#xff1a;concatenate 3.2.3 方式三&#xff…...

攻防世界——re2-cpp-is-awesome

64位 我先用虚拟机跑了一下这个程序&#xff0c;结果输出一串字符串flag ——没用 IDA打开后 F5也没有什么可看的 那我们就F12查看字符串找可疑信息 这里一下就看见了 __int64 __fastcall main(int a1, char **a2, char **a3) {char *v3; // rbx__int64 v4; // rax__int64 v…...

问山海——天涯海角——桃花渊boss攻击顺序

文章目录 桃花渊代码代码解读代码执行结果攻击顺序示意图 桃花渊 规划击杀各个boss顺序。 副本持续时间为30分钟&#xff0c;每个地方的boss被打死后&#xff0c;需要一定时间才能重新刷新。 只考虑其中两种boss&#xff0c;龟将和龟龙。各有四个。 其中我从一个boss地点到…...

springboot181基于springboot的乐享田园系统

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的 适用于计算机类毕业设计&#xff0c;课程设计参考与学习用途。仅供学习参考&#xff0c; 不得用于商业或者非法用途&#xff0c;否则&#xff0c;一切后果请用户自负。 看运行截图看 第五章 第四章 获取资料方式 **项…...

Dubbo集成Zookeeper embbed模式

为了简化应用支持服务方便的分合&#xff0c;使用Zookeeper embbed模式。集成Zookeeper比较容易&#xff0c;使用starter或自己写代码都可以。但是由于集成了Dubbo&#xff0c;每次启动时都会发现zookeeper没有启动就开始报错退出&#xff0c;但是确是已经集成了。 于是只能翻…...

156基于Matlab的光纤陀螺随机噪声和信号

基于Matlab的光纤陀螺随机噪声和信号&#xff0c;利用固定步长和可调步长的LMS自适应滤波、最小二乘法、滑动均值三种方法进行降噪处理&#xff0c;最后用阿兰方差评价降噪效果。程序已调通&#xff0c;可直接运行。 156 信号处理 自适应滤波 降噪效果评估 (xiaohongshu.com)...

秋招上岸大厂,分享一下经验

文章目录 秋招过程学习过程项目经验简历经验面试经验offer选择总结 秋招过程 今天是除夕&#xff0c;秋招已经正式结束了&#xff0c;等春节过完就到了春招的时间点了。 运气比较好&#xff0c;能在秋招的末尾进入一家大厂&#xff0c;拿到20k的sp offer。 从九月份十月份就开…...

使用 C++23 从零实现 RISC-V 模拟器

&#x1f449;&#x1f3fb; 文章汇总「从零实现模拟器、操作系统、数据库、编译器…」&#xff1a;https://okaitserrj.feishu.cn/docx/R4tCdkEbsoFGnuxbho4cgW2Yntc 使用 C23 从零实现 RISC-V 模拟器 使用 C23 从零实现的 RISC-V 模拟器&#xff0c;最终的模拟器可以运行 x…...

Hugging Face 刚刚推出了一款开源的 AI 助手制造工具,直接向 OpenAI 的定制 GPT 挑战

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…...

powershell 雅地关闭UDP监听器

在PowerShell中优雅地关闭UDP监听器意味着你需要一种机制来安全地停止正在运行的UdpClient实例。由于UdpClient类本身没有提供直接的停止或关闭方法&#xff0c;你需要通过其他方式来实现这一点。通常&#xff0c;这涉及到在监听循环中添加一个检查点&#xff0c;以便在接收到停…...

Google Cloud 2024 年报告重点介绍了关键的网络威胁和防御

Google Cloud 的 2024 年威胁范围报告预测了云安全的主要风险&#xff0c;并提出了加强防御的策略。 该报告由 Google 安全专家撰写&#xff0c;为寻求预测和应对不断变化的网络安全威胁的云客户提供了宝贵的资源。 该报告强调&#xff0c;凭证滥用、加密货币挖矿、勒索软件和…...

【算法题】102. 二叉树的层序遍历

题目 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;[[3],[9,20],[15,7]] 示例 2&#xff1a;…...

【龙年大礼】| 2023中国开源年度报告!

【中国开源年度报告】由开源社从 2015 年发起&#xff0c;是国内首个结合多个开源社区、高校、媒体、风投、企业与个人&#xff0c;以纯志愿、非营利的理念和开源社区协作的模式&#xff0c;携手共创完成的开源研究报告。后来由于一些因素暂停&#xff0c;在 2018 年重启了这个…...

本地搭建three.js官方文档

因为three.js官网文档是国外的网站&#xff0c;所以你没有魔法的情况下打开会很慢&#xff0c;这时我们需要在本地搭建一个官方文档便于我们学习查看。 第一步&#xff1a;首先我们先访问GitHub地址 GitHub - mrdoob/three.js: JavaScript 3D Library. 下载不下来的小伙伴们私…...

【seata自动化治愈数据库问题解决方案】

wu-database-lazy-seata-cure-plus-starter 描述 针对saas 数据库隔离情况下&#xff0c;每次版本迭代都需要重新修改对应的数据库&#xff0c;对于升级与运维存在一定的难度&#xff0c;那么这个数据库治愈框架来了&#xff0c;使用场景如下 1.数据库不存在自动创建数据库 …...

Node.js之npm单独与批量升级依赖包的方式

Node.js之npm单独与批量升级依赖包的方式 文章目录 Node.js之npm单独与批量升级依赖包的方式npm查看与升级依赖包1. 单独安装或升级最新版本2. 查看依赖但不升级1. npm outdated2. npm update 3. 批量升级新版本4. npm-check-updates1. 全局安装2. ncu查看可升级的版本3. 升级依…...

66.加一

66. 加一 给定一个由 整数 组成的 非空 数组所表示的非负整数&#xff0c;在该数的基础上加一。 最高位数字存放在数组的首位&#xff0c; 数组中每个元素只存储单个数字。 你可以假设除了整数 0 之外&#xff0c;这个整数不会以零开头。 示例 1&#xff1a; 输入&#xff…...

UI自动化之Poco常用断言方式

实际上用到的几种写断言的方式&#xff1a; 1.验证UI界面&#xff08;断言图片是否存在&#xff0c;UI页面不稳定情况下&#xff0c;图片识别效率不高&#xff09; assert_exists assert_not_exists 2.验证数值&#xff08;断言传入的两个值(数字或者string)是否相等&#xff…...

零代码玩转视觉定位:基于Qwen2.5-VL的Chord模型,5分钟从安装到实战

零代码玩转视觉定位&#xff1a;基于Qwen2.5-VL的Chord模型&#xff0c;5分钟从安装到实战 你有没有过这样的经历&#xff1f;翻看手机相册&#xff0c;想找一张“上周在咖啡馆拍的那杯拉花拿铁”&#xff0c;结果得一张张点开看。或者&#xff0c;电商运营同事每天要手动框选…...

vLLM-v0.17.1效果展示:vLLM在中文长文本摘要任务中的准确率实测

vLLM-v0.17.1效果展示&#xff1a;vLLM在中文长文本摘要任务中的准确率实测 1. vLLM框架简介 vLLM是一个专注于提升大语言模型推理效率的开源库&#xff0c;它的核心目标是让开发者能够更轻松地部署和使用各类大模型。这个项目最初由加州大学伯克利分校的研究团队发起&#x…...

Qwen3-Reranker-0.6B保姆级教程:requirements.txt依赖版本兼容性避坑指南

Qwen3-Reranker-0.6B保姆级教程&#xff1a;requirements.txt依赖版本兼容性避坑指南 1. 引言&#xff1a;为什么依赖版本如此重要 当你第一次接触Qwen3-Reranker-0.6B这个强大的重排序模型时&#xff0c;可能会觉得安装过程很简单——不就是运行一个pip install命令吗&#…...

Flink 1.11.2 + ClickHouse实战:手把手教你搭建实时商品浏览看板(附Tableau自动刷新技巧)

Flink ClickHouse 实时商品热度分析系统&#xff1a;从数据管道到自动刷新看板的完整实践 电商运营团队每天最关心的问题之一&#xff0c;就是哪些商品正在被用户频繁浏览。这些实时数据如果能快速转化为可视化的热力图&#xff0c;就能帮助运营人员及时调整推荐策略、优化库存…...

如何用Dify工作流引擎解决多平台内容分发效率难题

如何用Dify工作流引擎解决多平台内容分发效率难题 【免费下载链接】Awesome-Dify-Workflow 分享一些好用的 Dify DSL 工作流程&#xff0c;自用、学习两相宜。 Sharing some Dify workflows. 项目地址: https://gitcode.com/GitHub_Trending/aw/Awesome-Dify-Workflow 当…...

计算机毕设 java 基于 Javaweb 的家教管理系统 智能家教匹配管理系统 家教服务综合平台

计算机毕设 java 基于 Javaweb 的家教管理系统 f7xm39&#xff08;配套有源码 程序 mysql 数据库 论文&#xff09;本套源码可以先看具体功能演示视频领取&#xff0c;文末有联 xi 可分享随着家庭教育需求的不断增长&#xff0c;家教市场规模持续扩大&#xff0c;但传统家教模式…...

告别性能枷锁:Lenovo Legion Toolkit如何让游戏本释放真正潜力

告别性能枷锁&#xff1a;Lenovo Legion Toolkit如何让游戏本释放真正潜力 【免费下载链接】LenovoLegionToolkit Lightweight Lenovo Vantage and Hotkeys replacement for Lenovo Legion laptops. 项目地址: https://gitcode.com/gh_mirrors/le/LenovoLegionToolkit 在…...

35 岁前端被优化?我用 AI 转型全栈的完整路径

上周&#xff0c;我 35 岁的前端朋友老张被 HR 叫进会议室&#xff0c;聊了 20 分钟&#xff0c;拿了 N1 走人。 他的技术栈没问题&#xff0c;Vue3TS 都会&#xff0c;项目经验也够。问题在于&#xff1a;他做的所有工作&#xff0c;一个应届生 AI 工具都能搞定。这不是危言耸…...

Equalizer APO:在Windows音频处理中实现系统级音效精准调控

Equalizer APO&#xff1a;在Windows音频处理中实现系统级音效精准调控 【免费下载链接】equalizerapo Equalizer APO mirror 项目地址: https://gitcode.com/gh_mirrors/eq/equalizerapo Equalizer APO作为一款开源系统级音频处理引擎&#xff0c;通过Windows音频处理对…...

别再只用Dice Loss了!结合Focal Loss解决钢材缺陷分割中的小目标难题(附PyTorch代码)

突破小目标分割瓶颈&#xff1a;Focal Loss与Dice Loss的黄金组合实践 在工业质检领域&#xff0c;钢材表面缺陷分割任务常面临两个核心挑战&#xff1a;毫米级点状缺陷的漏检与复杂纹理背景下的误报。传统Dice Loss虽能缓解类别不平衡问题&#xff0c;但当遇到像素占比不足0.1…...