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

面试经典 150 题 ---- 移除元素

面试经典 150 题 ---- 移除元素

  • 移除元素
    • 方法一:双指针
    • 方法二:双指针优化

移除元素

方法一:双指针

题目要求在原数组的基础进行元素的删除,所以输出的数组长度一定小于原数组的长度,因此可以使用双指针,rigth 指针指向将要处理的元素,left 指针指向将要赋值的元素的位置。

  • 如果 right 指针指向的元素不等于 val,那么它就一定是将要输出的元素,将该元素赋值到 left 指针指向的位置,同时将 rightleft 指针同时右移。
  • 如果 right 指针指向的元素等于 val,那么它就一定不是要输出的元素,此时 left 不动,right 右移。

最后 left 的值就是要输出的数组的长度。

class Solution {public int removeElement(int[] nums, int val) {int n = nums.length;int left = 0;for (int right = 0; right < n; right++) {if (nums[right] != val) {nums[left] = nums[right];left++;}}return left;}
}

时间复杂度: O(n)
n 为数组的长度,最多只需要遍历该数组两遍

空间复杂度: O(1)
仅需要常数的空间保存若干变量

方法二:双指针优化

方法一中,我们的两个指针都是从 0 开始的,实际上,我们可以一个指针从头开始,一个指针从尾开始,这样就最多仅需要遍历一次数组就可以了。

class Solution {public int removeElement(int[] nums, int val) {int left = 0;int right = nums.length;while (left < right) {if (nums[left] == val) {nums[left] = nums[right - 1];right -- ;} else {left ++ ;}}return left;}
}

时间复杂度: O(n)
n 为数组的长度,最多只需要遍历该数组一遍

空间复杂度: O(1)
仅需要常数的空间保存若干变量

相关文章:

  • 方玲老师谈中国传统祭祖深远的意义
  • 计算机网络之NAT
  • arm 汇编调用C
  • Go黑帽子(第二章)
  • Go语言常用标准库fmt、格式化占位符、获取输入
  • UE5在VisualStudio升级后产生C++无法编译的问题
  • Keil-C语言小总结
  • MySQL(下)
  • 【Java】SpringMVC参数接收(一)
  • AI语音机器人,智能语音交互
  • User settings file选择非maven ->Conf文件夹下settings文件,导致项目jar包下载失败
  • 2024/1/28 备战蓝桥杯 1-3
  • 状态管理与导航守卫
  • SpringBoot,TDengine时序数据库,实现物联网,车联网大批量数据更新最佳实践。
  • 【BUG】联想Y7000电池电量为0且无法充电解决方案汇总
  • 【140天】尚学堂高淇Java300集视频精华笔记(86-87)
  • Android 初级面试者拾遗(前台界面篇)之 Activity 和 Fragment
  • chrome扩展demo1-小时钟
  • Computed property XXX was assigned to but it has no setter
  • HTTP请求重发
  • Java反射-动态类加载和重新加载
  • mac修复ab及siege安装
  • mysql innodb 索引使用指南
  • nodejs:开发并发布一个nodejs包
  • SpringBoot 实战 (三) | 配置文件详解
  • WePY 在小程序性能调优上做出的探究
  • 从零开始学习部署
  • 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...
  • 技术攻略】php设计模式(一):简介及创建型模式
  • 前端之Sass/Scss实战笔记
  • 什么是Javascript函数节流?
  • 使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件)
  • 我有几个粽子,和一个故事
  • 字符串匹配基础上
  • 自制字幕遮挡器
  • ​ssh免密码登录设置及问题总结
  • #pragam once 和 #ifndef 预编译头
  • $ git push -u origin master 推送到远程库出错
  • $().each和$.each的区别
  • $GOPATH/go.mod exists but should not goland
  • (2021|NIPS,扩散,无条件分数估计,条件分数估计)无分类器引导扩散
  • (3)nginx 配置(nginx.conf)
  • (6)STL算法之转换
  • (C#)Windows Shell 外壳编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令...
  • (C#)一个最简单的链表类
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (笔试题)分解质因式
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • (附程序)AD采集中的10种经典软件滤波程序优缺点分析
  • (附源码)spring boot网络空间安全实验教学示范中心网站 毕业设计 111454
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (附源码)计算机毕业设计SSM智慧停车系统
  • (附源码)小程序儿童艺术培训机构教育管理小程序 毕业设计 201740
  • (汇总)os模块以及shutil模块对文件的操作