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

算法题打卡力扣第26. 删除有序数组中的重复项(easy))

题目描述

在这里插入图片描述
在这里插入图片描述

解题思路

想到双指针,使用快慢指针

思路详解:
我们使用两个指针,一个“慢指针” i 和一个“快指针” j。
慢指针 i:它指向新数组(即去重后数组)的末尾。i 左边(包括i)的所有元素都是已经处理好的、不重复的元素。
快指针 j:它负责向前探索,遍历整个原始数组,寻找新的、不重复的元素。

具体步骤:

  • 初始化慢指针 i = 0。快指针 j 从 1 开始遍历数组。
  • 当 j 向前移动时,比较 nums[j] 和 nums[i] 的值。
  • 如果 nums[j] 不等于 nums[i]:
    这说明 nums[j] 是一个新的、不重复的元素。
    我们首先将慢指针 i 向前移动一位 (i++)。
    然后,将 nums[j] 的值赋给 nums[i],即 nums[i] = nums[j]。这样,新的唯一元素就被添加到了结果数组的末尾。
  • 如果 nums[j] 等于 nums[i]:
    这说明遇到了重复元素。
    我们什么都不做,只需要让快指针 j 继续向前移动 (j++),直到找到一个和 nums[i] 不同的元素。
  • 当快指针 j 遍历完整个数组后,i 指向的位置就是最后一个唯一元素的位置。那么,新数组的长度就是 i + 1

代码实现:

int removeDuplicates(int* nums, int numsSize) {int i = 0,j=0;for(int j=0;j<numsSize;j++){if(nums[i]!=nums[j]){i++;nums[i]=nums[j];}}int length = i+1;return length;
}

执行结果
在这里插入图片描述
复杂度分析
时间复杂度:O(n)
空间复杂度:O(1)

为什么这个方法可行?

因为原始数组是有序的。这个前提条件保证了所有重复的元素一定是相邻的。因此,当快指针 j 发现一个与 nums[i] 不同的元素时,这个元素一定是它所在数值区间的第一个,也是唯一一个需要被保留的。
这是一个效率非常高的解法,时间复杂度为 O(n)(因为每个元素最多被访问两次),空间复杂度为 O(1)(因为我们是在原地修改)。
g老师给的更好更标准的答案供大家参考~

int removeDuplicates(int* nums, int numsSize) {// 处理边界情况,如果数组为空,直接返回0if (numsSize == 0) {return 0;}// i 是慢指针,j 是快指针// i 指向新数组的最后一个有效元素的位置int i = 0; // 快指针 j 从第二个元素开始遍历整个数组for (int j = 1; j < numsSize; j++) {// 如果快指针指向的元素与慢指针指向的元素不同if (nums[j] != nums[i]) {// 慢指针向前移动一位i++;// 将新元素的值赋给慢指针的新位置nums[i] = nums[j];}// 如果相同,则快指针 j 继续前进,慢指针 i 保持不动}// 新数组的长度是慢指针的索引值加 1return i + 1;
}

ok,see you next time~

http://www.lryc.cn/news/624954.html

相关文章:

  • 计算机网络-IPv6
  • 使用 uv管理 Python 虚拟环境:比conda更快、更轻量的现代方案
  • 保姆级教学:使用 Jenkins 部署前端项目(2025 年最新版)
  • 知识蒸馏 Jensen-Shannon散度
  • Vue3 全新特性 defineModel 深度解析
  • [Oracle数据库] Oracle 进阶应用
  • BPO(Business Process Optimization,业务流程优化)
  • 信创产业:从技术突围到生态重构的强国之路
  • redis持久化机制:RDB和AOF
  • 手机视频怎么提取音频?3步转成MP3,超简单!
  • 十年回望:Vue 与 React 的设计哲学、演进轨迹与生态博弈
  • PLC 控制系统中 PCB 板的选型与设计要点
  • 申请免费的SSL证书,到期一键续签
  • 深入浅出决策树
  • python学习DAY45打卡
  • JMeter与大模型融合应用之构建AI智能体:评审性能测试脚本
  • Nodejs学习
  • 基于ssm jsp中学校园网站源码和答辩PPT论文
  • 视觉语言导航(11)——预训练范式 4.1
  • 封装、继承、多态的含义及其项目应用
  • 机器人技术核心模块与前沿趋势总结
  • TikTok墨西哥POP店今日正式开放!0佣金+流量扶持+5店开放
  • PG靶机 - Bratarina
  • C# NX二次开发:字符串控件StringBlock讲解
  • Pandas 中常用的统计计算、排序、分组聚合
  • plantsimulation知识点25.8.18-从一个RGV到另一台RGV,工件长度和宽度方向互换
  • 【牛客刷题】计算1到n最低位1代表的数字之和
  • Layui COP证书管理系统
  • 《Image Classification with Classic and Deep Learning Techniques》复现
  • 吴恩达 Machine Learning(Class 1)