面试经典 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)
仅需要常数的空间保存若干变量

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/653383.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CMMI、SPCA、CSMM,三种认证的差异有哪些?

在当今的企业环境中&#xff0c;体系认证已经成为了一个重要的议题。其中&#xff0c;CMMI、SPCA和CSMM是三种广泛使用的认证&#xff0c;它们在各自领域内具有特定的目标和要求&#xff0c;今天擎标就带大家了解一下这三种认证之间的差异。 CMMI、CSMM和SPCA分别是什么 1、C…

htb Pov wp简记

最近懒得飞起 不想写太细&#xff0c;有师傅想看完整的可以留个言或者私信 我再补补… user部分 nmap只扫到一个端口 http/80 目录没扫出什么 vhost扫出dev来 在抓包访问页面邮箱丢出去的包有包含asp.net的viewstate&#xff0c;这里一开始我还没在意&#xff0c;后来发现有个…

【YOLO系列算法俯视视角下舰船目标检测】

YOLO系列算法俯视视角下舰船目标检测 数据集和模型YOLO系列算法俯视视角下舰船目标检测YOLO系列算法俯视视角下舰船目标检测可视化结果 数据集和模型 数据和模型下载&#xff1a; YOLOv6俯视视角下舰船目标检测训练好的舰船目标检测模型舰船目标检测数据YOLOv7俯视视角下舰船…

AGP更改gradle版本无效的解决方案

从Github下载了一个项目&#xff0c;非常激进&#xff0c;AGP版本8.4.0&#xff0c;而我的AS只支持到8.2.0 详见&#xff1a;https://developer.android.com/build/releases/gradle-plugin?buildsystemndk-build&hlzh-cn#android_gradle_plugin_and_android_studio_compa…

微服务架构实施攻略:如何选择合适的微服务数据管理策略?

随着业务的快速发展和系统的日益复杂&#xff0c;传统的单体应用逐渐显露出瓶颈&#xff0c;已无法满足现代软件研发的需求。微服务架构作为一种灵活、可扩展的解决方案&#xff0c;通过将复杂系统拆分为一系列小型服务来提高系统的可伸缩性、灵活性和可维护性。在实施微服务架…

代码随想录算法训练营第十八天| 513.找树左下角的值 ● 112. 路径总和 ● 106.从中序与后序遍历序列构造二叉树

层序遍历、回溯、由两种遍历序列逆推二叉树 513.找树左下角的值 思路&#xff1a; 使用层序遍历&#xff0c;只需要记录最后一行第一个节点的数值就可以了。 特殊情况&#xff1a; 代码实现 class Solution { public:int findBottomLeftValue(TreeNode* root) {int val;//利用…

系统安全程序优化

我们为什么需要优化防火墙服务呢&#xff1f; 防火墙概念介绍&#xff1a; 防火墙作为本地计算机的一道防御&#xff0c;抵御着病毒、蠕虫、木马和强力的黑客攻击。 它既能以软件&#xff08;安全程序&#xff09;的形式出现&#xff0c;也可以采用硬件&#xff08;物理路由…

【Javaweb程序设计】【C00163】基于SSM房屋中介服务平台(论文+PPT)

基于SSM房屋中介服务平台&#xff08;论文PPT&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于ssm的房屋中介服务平台 本系统分为前台、管理员、用户3个功能模块。 前台&#xff1a;当游客打开系统的网址后&#xff0c;首先看到的就是首页界面。…

【极数系列】Flink集成DataSource读取集合数据(07)

文章目录 01 引言02 简介概述03 基于集合读取数据3.1 集合创建数据流3.2 迭代器创建数据流3.3 给定对象创建数据流3.4 迭代并行器创建数据流3.5 基于时间间隔创建数据流3.6 自定义数据流 04 源码实战demo4.1 pom.xml依赖4.2 创建集合数据流作业4.3 运行结果日志 01 引言 源码地…

C语言-指针的基本知识(下)

四、指针的分类 按指针指向的数据的类型来分 1:字符指针 字符型数据的地址 char *p;//定义了一个字符指针变量&#xff0c;只能存放字符型数据的地址编号 char ch; p &ch; 2&#xff1a;短整型指针 short int *p;//定义了一个短整型的指针变量p&#xff0c…

怎样做好Code Review

Code Review方案 定义 Code Review代码评审是指在软件开发过程中&#xff0c;通过对源代码进行系统性检查的过程。通常的目的是查找各种缺陷&#xff0c;包括代码缺陷、功能实现问题、编码合理性、性能优化等&#xff1b;保证软件总体质量和提高开发者自身水平 code review …

【机器学习】正则化

正则化是防止模型过拟合的方法&#xff0c;它通过对模型的权重进行约束来控制模型的复杂度。 正则化在损失函数中引入模型复杂度指标&#xff0c;利用给W加权值&#xff0c;弱化了数据的噪声&#xff0c;一般不正则化b。 loss(y^,y)&#xff1a;模型中所有参数的损失函数&…

[论文阅读] |RAG评估_Retrieval-Augmented Generation Benchmark

写在前面 检索增强能够有效缓解大模型存在幻觉和知识时效性不足的问题&#xff0c;RAG通常包括文本切分、向量化入库、检索召回和答案生成等基本步骤。近期组里正在探索如何对RAG完整链路进行评估&#xff0c;辅助阶段性优化工作。上周先对评估综述进行了初步的扫描&#xff0…

mkcert的安装和使用,5分学会在本地开启localhost的https访问方式

mkcert官方仓库地址&#xff1a;https://github.com/FiloSottile/mkcert#installation mkcert 是一个简单的工具&#xff0c;用于制作本地信任的开发证书。它不需要配置。 简化我们在本地搭建 https 环境的复杂性&#xff0c;无需操作繁杂的 openssl 实现自签证书了&#xff…

docker笔记

容器技术 应用程序仅由较少数量的大组件构成时&#xff0c;可以给每个组件分配专用的虚拟机来隔离他们的环境。但是&#xff0c;组件更小&#xff0c;数量更多时&#xff0c;继续使用虚拟机来隔离得话&#xff0c;会浪费硬件资源&#xff0c;增加人力资源。 Linux容器技术隔离…

在WebSocket中使用Redis出现空指针异常解决方案

文章目录 在WebSocket中使用Redis1.问题描述2.原因3.解决步骤1.新建一个SpringUtil.java类&#xff0c;通过getBean的方法主动获取实例2.在WebSocketSingleServer.java中导入 在WebSocket中使用Redis 1.问题描述 在controller 和 service中都可以正常使用Redis&#xff0c;在…

xcode安装visionOS Simulator模拟器报错解决方法手动安装方法

手动安装方法&#xff1a; 手动下载visionOS Simulator模拟器地址&#xff1a; https://developer.apple.com/download/all/ 选择 Xcode 版本 sudo xcode-select -s /Applications/Xcode.app # 用 Xcode-beta 的话是&#xff1a; # xcode-select -s /Applications/Xcode-beta…

openssl3.2 - 测试程序的学习

文章目录 openssl3.2 - 测试程序的学习概述笔记openssl3.2 - 测试程序的学习 - 准备openssl测试专用工程的模板openssl3.2 - 测试程序的学习 - test\aborttest.copenssl3.2 - 测试程序的学习 - test\sanitytest.copenssl3.2 - 测试程序的学习 - test\acvp_test.copenssl3.2 - 测…

Python 编程技巧

在开发解决方案时&#xff0c;我们倾向于将复杂的实际问题提炼为更小、更易于管理的子问题&#xff0c;然后使用函数来解决这些问题。函数是冗余代码的克星&#xff0c;也是我们抵御代码复杂性的最强防线。 大多数函数在编写过程中&#xff0c;关键是其返回值。函数产生结果的…

邻接矩阵、关联矩阵

邻接矩阵&#xff1a; 邻接矩阵是一种用来表示图中顶点间相互连接关系的矩阵。在邻接矩阵中&#xff0c;矩阵的行和列都代表图中的顶点。 对于无权图&#xff0c;如果顶点 i 和顶点 j 之间有一条边&#xff0c;则矩阵中的元素 Aij​&#xff08;位于第 i 行和第 j 列&#xff…