当前位置: 首页 > 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.cnnetsun.cn/news/42819.html

相关文章:

  • Windows右键菜单终极优化指南:让你的右键菜单重获新生
  • ZTools v1.1.2:桌面应用启动器与搜索工具
  • Flutter Android APK 重命名 签名验证操作
  • MarchingCubes 网格数据体素化并提取等值面
  • 基于SpringBoot的餐厅推荐系统 计算机毕业设计选题 计算机毕设项目 前后端分离 【源码-文档报告-代码讲解】
  • 禁用MinIO后的7种企业级替代方案评测
  • document.querySelector在电商网站中的5个实战应用
  • 企业级应用:OpenJDK1.8在生产环境中的部署实践
  • Homebrew实战:从安装到开发环境搭建全流程
  • 企业级Git仓库SSH连接安全最佳实践
  • Day12 贝叶斯优化可视化和随机森林的解读
  • 数据湖不是湖,是江湖:Delta Lake / Iceberg / Hudi 到底该选谁?
  • 告别开题报告模板拼凑!虎贲等考 AI 智能生成,让选题逻辑从模糊想法变身可执行研究计划
  • 【LeetCode刷题】跳跃游戏
  • 鸿蒙PC UI控件库 - PasswordInput 密码输入框详解
  • day37简单的神经网络@浙大疏锦行
  • 【水果识别】基于机器视觉苹果和香蕉的成熟度和大小检测附Matlab代码
  • JAVA的平凡之路——此峰乃是最高峰JVM-附加小菜-04
  • 【电力系统】电力系统优化与控制热液调度附Matlab代码和报告
  • 基于6种最新算法(小龙虾优化算法COA、MSA、RTH、NOA、BFO、SWO)求解机器人路径规划研究附Matlab代码
  • Golang实战:构建综合多头(逾期+反欺诈)风险查询的高性能客户端
  • 【TSP问题】基于蜣螂算法DBO和改进的蜣螂算法FADBO求解旅行商TSP问题(可根据自己的经纬度设置自己想要到达的地区)附Matlab代码
  • 【太阳能学报EI复现】基于粒子群优化算法的风-水电联合优化运行分析附Matlab代码
  • 数据结构:二叉排序树,平衡二叉树,红黑树的介绍
  • 软件复用的分类与实现
  • google服务
  • 进程PCB
  • 实战教程:1小时掌握逆向Unity游戏 (共13课时)
  • [从零构建操作系统]08 函数调用时栈的底层行为解析
  • 力扣hot100:搜索插入位置