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

相关文章:

  • CentOS 7.8上从零编译SPDK v20.10:手把手搞定依赖、子模块和静态/动态库
  • 余生黄金回收|渭南临渭区黄金回收总店地址+电话,2026今日实时金价无损耗 - 余生黄金回收
  • 2026网店饰品批发品牌前几名主流盘点:综合实力资质梳理 - 资讯纵览
  • 3分钟实战PicQuickCompare:揭秘高效自动化图片差异检测的智能解决方案
  • 护发精油十大品牌推荐:来自榜单的6款精选好物 - 资讯纵览
  • 医学图像分类的终极指南:如何使用MedMNIST标准化数据集快速构建AI模型
  • 2026北京丰台区股权变更:优质机构深度解析! - 小柏云
  • 终极指南:如何用Mousecape免费打造个性化Mac鼠标指针管理器
  • 5大核心功能革新英雄联盟游戏体验:LeagueAkari LCU API效率工具深度解析
  • 笔记本双显卡怎么查Vulkan?保姆级教程:从设备管理器到GPU-Z,搞定NVIDIA独显与Intel核显的兼容性检查
  • 2026年4月水处理运营推荐,反渗透水处理/除盐水处理/污水处理/生活污水处理/地埋式污水处理,水处理工厂怎么选择 - 品牌推荐师
  • 2026年佛山铰链滑轨拉篮厂家逐一实测横向优劣解读:阻尼铰链、隐藏滑轨、收纳五金一站式选型范本 - 企业名录优选推荐
  • e1547:重新定义你的e621社区移动端体验
  • 统信UOS
  • Vite 插件开发与 TypeScript 类型提示实践指南
  • 2026年拉链厂家推荐排行榜:金属/树脂/尼龙/防水/隐形拉链,服装拉链品牌实力与品质之选 - 品牌企业推荐师(官方)
  • 一文读懂:26年山东一卡通回收流程全攻略 - 团团收购物卡回收
  • vue3 开发知识点
  • 2026年Q2中国黑山石优质厂家首选推荐:合肥飞宇石业有限公司电话18895462999 - 安互工业信息
  • 2026降AI率工具红黑榜:降AI率网站怎么选?清单来了 - 降AI小能手
  • 基于ESP-NOW与离线语音识别的本地化智能家居控制系统实践
  • 2026年佛山铰链滑轨拉篮五金厂家深度横评:阻尼铰链与隐藏滑轨哪家值得长期合作? - 企业名录优选推荐
  • 2026年佛山阻尼铰链与隐藏滑轨厂家深度横评:顺德源头工厂怎么选才能高毛利不内卷? - 企业名录优选推荐
  • vue3 原理
  • 2026年贵州果酒源头厂家推荐榜单:花果米酒定制批发哪家靠谱,行业优质厂商口碑汇总 - 海棠依旧大
  • 盒马鲜生卡回收全攻略:回收心得与技巧一次搞定! - 团团收购物卡回收
  • 2026微信立减金回收全攻略|正规渠道选择与新手避坑指南 - 可可收公众号
  • OpenCore Configurator:告别复杂文本编辑,3步搞定黑苹果引导配置
  • 2026年佛山阻尼铰链与隐藏滑轨厂家同类品类细致比对:顺德源头工厂怎么选才不踩坑? - 企业名录优选推荐
  • CSDN独家整理:BuildingAI 应用场景全解析——智能客服、电商设计、信息流投放