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

26.删除有序数组中的重复项

在这里插入图片描述

题目:26. 删除有序数组中的重复项

给定一个非严格递增排列(即允许重复、但有序)的数组 nums,要求原地删除重复元素,使每个元素只出现一次,并返回去重后数组的长度。


双指针法

由于数组已经有序,重复元素一定是连续的,这给我们用双指针法提供了便利。

我们使用两个指针:

  • fast:快指针,负责遍历整个数组;
  • slow:慢指针,指向去重后数组的最后一个位置

算法逻辑如下:

  1. 初始化 slow = 0,表示当前去重数组的末尾;
  2. 每次 nums[fast] != nums[slow],说明遇到新元素,将它放在 slow + 1 位置,同时 slow++
  3. 最终返回 slow + 1 即为新数组长度。

代码实现

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

示例演示

输入:

nums = [0,0,1,1,1,2,2,3,3,4]

执行过程(逐步覆盖):

fast 遇到新元素 -> 覆盖 slow + 1
最终 nums = [0,1,2,3,4,...]
返回值为 5

复杂度分析

  • 时间复杂度O(n),每个元素最多遍历一次;
  • 空间复杂度O(1),在原数组上原地操作,无额外空间。

http://www.dtcms.com/a/301361.html

相关文章:

  • MyBatis-Plus高效开发实战
  • 内存管理和垃圾收集-02: 操作系统如何管理内存?
  • Linux驱动开发笔记(五)——设备树(中)——节点的标准属性
  • 益莱储:明智地投资测试仪器
  • S7-1500 与 S7-1200 存储区域保持性设置特点详解
  • 电子板原理功能区解析与PlantUML图示
  • 3,Windows11安装docker保姆级教程
  • 轻量化多模态文档处理利器SmolDocling:技术原理与场景落地引言:文档智能处理的范式革命
  • 数据结构基础内容(第六篇:二叉搜索与平衡二叉树)
  • MySQL锁机制与MVCC原理剖析
  • 直播带货工具About v1.5.10 免费版
  • GEO优化实战:如何在DeepSeek、豆包等AI平台抢占推荐位?
  • MOE架构详解:原理、应用与PyTorch实现
  • 计算圆周率(π)代码实现【c++】
  • Java中排序规则详解
  • cJSON在STM32单片机上使用遇到解析数据失败问题
  • 计算柱状图中最大的矩形【单调栈】
  • Dify 本地化部署深度解析与实战指南
  • 蜣螂优化算法的华丽转身:基于Streamlit的MSIDBO算法可视化平台
  • 【ESP32设备通信】-W5500与ESP32 /ESP32 S3集成
  • MySQL - 性能优化
  • Java面试实战:电商高并发与分布式事务处理
  • maven optional 功能详解
  • Java进阶7:Junit单元测试
  • 数据结构基础内容(第九篇:最短路径)
  • OpenCv中的 KNN 算法实现手写数字的识别
  • 电子电路设计学习
  • git回退版本教程
  • Java validation
  • Java学习第八十部分——Freemarker