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

删除有序数组中的重复项(C++)

一、问题描述

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

  • 去重后,nums的前k个元素应包含排序后的唯一数字,下标k-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]

二、解题思路

1. 核心思路分析

利用数组非严格递增的特性,采用双指针法(快慢指针)原地去重:

  • 慢指针slow:指向去重后数组的最后一个有效元素
  • 快指针fast:遍历整个数组,寻找与慢指针指向元素不同的新元素;
  • nums[fast] != nums[slow]时,慢指针后移,并将快指针指向的新元素赋值给慢指针位置,实现原地更新。

2. 算法选择

双指针法是最优解法:

  • 时间复杂度:O(n)(仅遍历数组一次);
  • 空间复杂度:O(1)(仅用常数级额外空间);
  • 优势:原地操作、无额外内存开销、效率高。

三、C++ 代码实现

http://www.rkmt.cn/news/94943.html

相关文章:

  • AlignTwoPolyDatas 基于ICP算法的配准和相机视角切换
  • 洛雪音乐PC版2.12.0| 最强电脑免费听歌软件,所有平台音乐都能听,需要导入音源
  • 正义荣耀圣戒 无限代金券买断
  • 2025年专业嵌入式软件开发公司权威榜单发布
  • ML-4360 3D视觉 笔记
  • 企业级Git仓库SSH连接安全最佳实践
  • Kingbase KES常见问题排查与解决指南:从启动报错到性能优化
  • AI如何帮你解决MySQL的--skip-grant-tables问题
  • 互联网大厂Java面试:从Spring Boot到微服务架构的深度剖析
  • 中望CAD2025:将多段线转换为样条曲线
  • 零基础教程:手把手教你下载安装OpenJDK1.8
  • LLMs之dLLM:《LLaDA2.0: Scaling Up Diffusion Language Models to 100B》翻译与解读
  • 【LeetCode刷题】跳跃游戏
  • 企业级实战:CentOS7高可用MySQL集群部署
  • 告别“统计软件盲盒”:虎贲等考AI如何让你的数据分析成果变得可读、可解释与可复用?
  • 高性能音频处理:深入解析无锁环形缓冲区 (Lock-Free Ring Buffer)
  • LLMs之RAG:《Meta-Chunking: Learning Text Segmentation and Semantic Completion via Logical Perception》翻
  • Windows右键菜单终极优化指南:ContextMenuManager完全使用手册
  • LLMs之Agent:《Agent S: An Open Agentic Framework that Uses Computers Like a Human》翻译与解读
  • AI如何帮你快速解决.NET Framework 3.5安装问题
  • GG3M (鸽姆)划时代科技前沿AI项目:文明级操作系统,东方智慧驱动全球治理新范式——核心问题解答(11问11答)
  • tar -czvf vs 其他压缩工具:效率对比
  • MLMs之GPT-5:OpenAI 发布 GPT-5.2 — 深入解析性能、编码与视觉能力的升级—面向专业工作的长上下文与工具调用飞跃—如何在长文档、智能体与代码工作流中部署
  • 什么是可信计算?如何在可信计算中加入RFID
  • 4.1.17.1.MYSQL基础
  • 2025年论文写作必备:实测6款AI工具后的良心推荐
  • 微信小程序开发实战之 01-微信小程序入门
  • neural network中的loss function (一)
  • AI论文工具怎么选?6款详细对比+2025年推荐清单
  • 缺少libgcc_s_seh-1.dll