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

Leetcode27.移除元素

目录

问题描述

算法思路

代码实现

示例1

双指针法执行过程

最终结果

复杂度分析

问题描述

给定一个数组nums和一个值val,你需要原地移除所有数值等于val的元素,并返回移除后数组的新长度。

不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并原地修改输入数组。

元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

算法思路


使用双指针法 来解决这个问题:

1. 1.
慢指针(i) :指向下一个不等于val的元素应该放置的位置
2. 2.
快指针(j) :遍历整个数组,检查每个元素
算法步骤
1. 1.
初始化慢指针i为0
2. 2.
用快指针j遍历数组
3. 3.
如果nums[j]不等于val,则将nums[j]的值赋给nums[i],然后i自增
4. 4.
遍历结束后,i的值就是数组中不等于val的元素数量

代码实现

class Solution(object): def removeElement(self, nums, val): # 使用双指针法 # i: 慢指针,指向下一个不等于val的元素应该放置的位置 # j: 快指针,遍历整个数组 i = 0 for j in range(len(nums)): if nums[j] != val: nums[i] = nums[j] i += 1 return i

示例1

输入:nums = [3,2,2,3], val = 3

输出:2, 数组的前两个元素为 [2,2]

双指针法执行过程

使用双指针法解决这个问题:慢指针 i 用于记录结果数组的位置,快指针 j 用于遍历原数组。

初始化

慢指针 i = 0,快指针 j = 0

nums = [3, 2, 2, 3] i = 0, j = 0

第1步

快指针 j 指向 nums[0] = 3,等于 val = 3,跳过此元素

nums = [3, 2, 2, 3] i = 0, j = 0

慢指针 i 保持不变,快指针 j 准备移动到下一个位置

第2步

快指针 j 指向 nums[1] = 2,不等于 val = 3,将 nums[1] 赋值给 nums[i]

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

i = 0 → 1, j = 1

慢指针 i 自增为 1,快指针 j 准备移动到下一个位置

第3步

快指针 j 指向 nums[2] = 2,不等于 val = 3,将 nums[2] 赋值给 nums[i]

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

i = 1 → 2, j = 2

慢指针 i 自增为 2,快指针 j 准备移动到下一个位置

第4步

快指针 j 指向 nums[3] = 3,等于 val = 3,跳过此元素

nums = [2, 2, 2, 3] i = 2, j = 3

慢指针 i 保持不变为 2,快指针 j 准备移动到下一个位置

第5步

快指针 j 已经遍历完整个数组,算法执行完毕

nums = [2, 2, 2, 3] i = 2, j = 3

最终结果

慢指针 i 的值为 2,表示数组中有 2 个不等于 val 的元素

数组前 i 个元素 [2, 2] 即为移除所有 val 后的结果

返回值:2

结果数组:[2, 2, 2, 3](前2个元素为有效结果)

复杂度分析

时间复杂度:O(n),只遍历数组一次

空间复杂度:O(1),只使用常数级别的额外空间

http://www.jsqmd.com/news/916994/

相关文章:

  • CentOS 7.8上从零编译SPDK v20.10:手把手搞定依赖、子模块和静态/动态库
  • 游戏开发中的平滑之道:用拉格朗日插值实现角色动画和相机轨迹(Unity/C#示例)
  • 余生黄金回收|渭南临渭区黄金回收总店地址+电话,2026今日实时金价无损耗 - 余生黄金回收
  • 别再为Modbus地址发愁了!手把手教你用C#和NModbus4读写西门子S7-1500的浮点数
  • 2026网店饰品批发品牌前几名主流盘点:综合实力资质梳理 - 资讯纵览
  • 从CentOS 7到Ubuntu 22.04:一篇讲透dmidecode查看内存信息的通用方法与常见‘坑点’
  • 如何快速部署跨平台B站观影工具:PiliPlus开源客户端完整指南
  • 3分钟实战PicQuickCompare:揭秘高效自动化图片差异检测的智能解决方案
  • 护发精油十大品牌推荐:来自榜单的6款精选好物 - 资讯纵览
  • 3个步骤,如何让QQ音乐加密文件获得“音乐护照“?
  • 医学图像分类的终极指南:如何使用MedMNIST标准化数据集快速构建AI模型
  • 为什么92%的企业误读Gemini商业分析报告?——高管必知的5个认知断层与校准路径
  • 3D打印遥控船DIY:从零打造低成本水上模型,详解设计、组装与调试
  • 【Gemini弹性伸缩架构白皮书】:支撑每秒470万Token吞吐的动态资源编排算法(附Google SRE验证数据)
  • 郑州市中原区防水补漏|维小达 专业不拆除补漏、室内防水、屋面防水、厨卫漏水维修一站式服务 - 维小达科技
  • 2026北京丰台区股权变更:优质机构深度解析! - 小柏云
  • 终极英雄联盟智能工具箱:提升游戏效率的完整指南
  • 如何自定义ThermoQwen TSF:调整LoRA参数和回归器配置的完整指南
  • 2026跨境支付到账速度实测:连连国际30个本地账户实现T+0秒级到账 - 资讯纵览
  • 如何快速部署免费的B站视频解析API:面向开发者的完整指南
  • 避坑指南:在Windows Server上部署ZLMediaKit + wvp-GB28181-pro的完整流程与常见错误排查
  • 基于Arduino与WS2812B的RGB LED数字时钟DIY全解析
  • 陕西机械制造行业 GEO 优化科普:3 分钟看懂 AI 搜索时代获客破局
  • 2026年自贡家装公司权威排行榜TOP10,官方数据发布 - 商业新知
  • 终极指南:如何用Mousecape免费打造个性化Mac鼠标指针管理器
  • 5大核心功能革新英雄联盟游戏体验:LeagueAkari LCU API效率工具深度解析
  • 2026年4月水处理运营推荐,反渗透水处理/除盐水处理/污水处理/生活污水处理/地埋式污水处理,水处理工厂怎么选择 - 品牌推荐师
  • 笔记本双显卡怎么查Vulkan?保姆级教程:从设备管理器到GPU-Z,搞定NVIDIA独显与Intel核显的兼容性检查
  • AVL树(C++详解版)
  • HS2-HF Patch:Honey Select 2游戏体验的终极优化方案