【面试经典150 | 数组】移除元素

news2025/1/19 7:05:54

文章目录

  • 写在前面
  • Tag
  • 题目来源
  • 题目解读
  • 解题思路
    • 方法一:原地操作
  • 写在最后

写在前面

本专栏专注于分析与讲解【面试经典150】算法,两到三天更新一篇文章,欢迎催更……

专栏内容以分析题目为主,并附带一些对于本题涉及到的数据结构等内容进行回顾与总结,文章结构大致如下,部分内容会有增删:

  • Tag:介绍本题牵涉到的知识点、数据结构;
  • 题目来源:贴上题目的链接,方便大家查找题目并完成练习;
  • 题目解读:复述题目(确保自己真的理解题目意思),并强调一些题目重点信息;
  • 解题思路:介绍一些解题思路,每种解题思路包括思路讲解、实现代码以及复杂度分析;
  • 知识回忆:针对今天介绍的题目中的重点内容、数据结构进行回顾总结。

Tag

【原地操作】【双指针】【数组】


题目来源

面试经典 150 题 —— 27. 移除元素


题目解读

移除数组 nums 中的 val 值,要求原地操作,但是数组中的元素顺序可以改变,最后输出移除所有 val 后数组的长度。


解题思路

方法一:原地操作

原地操作,那么我们就不能使用额外的数组来存放非 val 的元素从而实现移除操作,但是我们可以使用 “覆盖” 的思想来模拟移除操作。

具体地,维护两个指针 iji 指针用来遍历数组查找哪个位置上的元素等于 valj 指向用来覆盖 i 位置的元素。初始化 i = 0j = nums.size() - 1,只要 nums[i] = val,我们就用 nums[j] 来覆盖,使用了 nums[j] 之后,j 指针就要左移指向下一个将要使用的元素;只有 nums[i] != val 时,我们才会右移 i 指针,准备处理下一个元素。

直到 i 指针超过 j 指针,表明可以被用来覆盖的元素已经没有了,i 的值就是原数组中的非 val 的数,直接返回 i

实现代码

class Solution {
public:
    int removeElement(vector<int>& nums, int val) {
        int i = 0, j = nums.size() - 1;
        while (i <= j) {
            if (nums[i] == val) {
                nums[i] = nums[j--];
            }
            else ++i;
        }
        return i;
    }
};

复杂度分析

时间复杂度: O ( n ) O(n) O(n) n n n 为原数组 nums 的长度。

空间复杂度: O ( 1 ) O(1) O(1),仅使用了两个指针变量,是原地操作。


写在最后

如果文章内容有任何错误或者您对文章有任何疑问,欢迎私信博主或者在评论区指出 💬💬💬。

如果大家有更优的时间、空间复杂度方法,欢迎评论区交流。

最后,感谢您的阅读,如果感到有所收获的话可以给博主点一个 👍 哦。

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

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

相关文章

基于YOLOv8模型和BDD数据集的自动驾驶目标检测系统(PyTorch+Pyside6+YOLOv8模型)

摘要&#xff1a;基于YOLOv8模型和BDD数据集的自动驾驶目标检测系统可用于日常生活中检测与定位车辆目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的目标检测&#xff0c;另外本系统还支持图片、视频等格式的结果可视化与结果导出。本系统采用YOLOv8目标检测…

【Spring面试】四、Bean的生命周期、循环依赖、BeanDefinition

文章目录 Q1、Bean有哪些生命周期回调方法&#xff1f;有哪几种实现方式&#xff1f;Q2、Spring在加载过程中Bean有哪几种形态Q3、解释下Spring框架中Bean的生命周期Q4、Spring是如何解决Bean的循环依赖的Q5、Spring是如何帮我们在并发下避免获取不完整的Bean的&#xff1f;Q6、…

LeetCode 729. My Calendar I【设计;有序集合,二分查找;线段树】中等

本文属于「征服LeetCode」系列文章之一&#xff0c;这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁&#xff0c;本系列将至少持续到刷完所有无锁题之日为止&#xff1b;由于LeetCode还在不断地创建新题&#xff0c;本系列的终止日期可能是永远。在这一系列刷题文章…

Single View Point Omnidirectional Camera Calibration from Planar Grids

参考论文 paper里面最关键的部分为这段 实际相当于有一个xi的参数要使用, 和正常的相机内参定义不太一样, 那么在3d往相机上投的时候, 是这样的 也参考: https://github.com/autonomousvision/kitti360Scripts/blob/master/kitti360scripts/helpers/project.py#L174-L198

TDesign数据请求wx.request

wxml页面如下&#xff1a; bind:tap绑定了handleAjax事件&#xff0c;js页面如下&#xff1a; 点击按钮&#xff0c;运行成功输出data 报错&#xff1a; 小程序 (qq.com)https://mp.weixin.qq.com/ 再次点击按钮ajax 运行成功&#xff1a;

JTAG 简介

文章目录 1、JTAG 基本原理1.1、JTAG接口包括以下几个信号&#xff1a;1.2、The Debug TAP State Machine (DBGTAPSM) 2、JTAG 的应用 1、JTAG 基本原理 JTAG是Joint Test Action Group的缩写&#xff0c;它是一种国际标准测试协议&#xff0c;主要用于芯片或印制电路板的边界…

SpringBoot系列(12):SpringBoot集成log4j2日志配置

最近项目上有使用到log4j2日志模板配置&#xff0c;本文简单总结一下之前的学习笔记&#xff0c;如有纰漏之处&#xff0c;请批评指正。 1. log4j2日志依赖 使用log4j2日志模板时&#xff0c;需要引入相关依赖&#xff0c;下边的两种依赖方式均可。 1.1 使用sl4j依赖时 <…

kafka学习-消费者

目录 1、消费者、消费组 2、心跳机制 3、消费者常见参数配置 4、订阅 5、反序列化 基本概念 自定义反序列化器 6、位移提交 6.1、自动提交 6.2、手动提交 同步提交 异步提交 7、再均衡 7.1、定义与基本概念 7.2、缺陷 7.3、如何避免再均衡 7.4、如何进行组内分…

React+Typescript+react-router 6 创建路由操作

本文我们来看看路由的安装 其实路由的操作没有什么变化 但是还是给大家讲一下 那么我们打开项目 在项目终端输入 npm install --save react-router react-router-dom安装 一下 react-router 和 react-router-dom 这都是react开发很基本的插件了 不过大家安装前先注意好我的版…

C++ 进制转化入门知识(1)

一、什么是进制 进制是一种用来表示数值的系统或方法&#xff0c;它是基于一个特定的基数来工作的。在我们常见的几种进制中&#xff0c;有&#xff1a; 1. **二进制&#xff08;基数 2&#xff09;**&#xff1a; 二进制只用两个数字&#xff1a;0和1。这是计算机内部使用…

GB28181学习(三)——心跳保活

心跳保活 要求&#xff1a; 1. 当原设备发现工作异常时&#xff0c;应立即向本SIP监控域的SIP服务器发送状态信息&#xff1b; 2. 无异常时&#xff0c;定时向本SIP监控域的SIP服务器发送状态信息&#xff1b; 3. 状态信息报送采用**MESSGAE**方法&#xff1b; 4. SIP设备宜在…

不同温度与工况的放电曲线与内阻曲线

在电动汽车中&#xff0c;机器学习被广泛应用于许多领域&#xff0c;包括电池状态估计。电池的状态 of charge (SOC) 是电池中可用能量的百分比。准确估计SOC对于优化电池性能、延长电池寿命和维护安全性至关重要。然而&#xff0c;SOC估计是一个复杂的任务&#xff0c;因为电池…

线性规划对偶问题:理论推导和实际应用

文章目录 对偶问题实例对偶问题定义和性质定义性质 对偶问题应用影子价格理论应用 参考文献 对偶问题实例 之前在很多地方&#xff0c;都看到过“对偶”这两个字眼&#xff0c;总觉得这个词很高大上。对偶理论的百度百科中甚至写到&#xff1a;“在线性规划早期发展中最重要的…

Unity之创建第一个2D游戏项目

一 Unity环境配置 1.1 Untity资源官网下载&#xff1a;https://unity.cn/releases 1.2 Unity Hub集成环境&#xff0c;包含工具和项目的管理 1.3 Unity Editor编辑器 1.4 Visual Studio 2022脚本编辑器 1.5 AndroidSKD&#xff0c;JDK&#xff0c;NDK工具&#xff0c;用于and…

tcp连接+套接字编程

tcp头部 tcp端口号 TCP的连接是需要四个要素确定唯一一个连接&#xff1a;&#xff08;源IP&#xff0c;源端口号&#xff09; &#xff08;目地IP&#xff0c;目的端口号&#xff09; 所以TCP首部预留了两个16位作为端口号的存储&#xff0c;而IP地址由上一层IP协议负责传递 源…

autoware.ai感知随笔--地面滤波

autwoware.ai中点云预处理–points_preprocessor points_preprocessor cloud_transformer: 点云坐标转换,将输入的点云转化为velodyne坐标系下的点云。 compare_map_filter: 对比激光雷达点云和点云地图&#xff0c;然后提取&#xff08;或去除&#xff09;一致的点。 |input_…

联通面试题

一、GC 1.1、目标 GC的主要作用是自动识别和释放不再使用的对象&#xff0c;回收其所占用的内存&#xff0c;以防止内存泄漏和内存溢出的问题。 1.2、如何实现 1.2.1、标记阶段 GC从根对象&#xff08;如线程栈中的引用、静态变量等&#xff09;开始&#xff0c;通过可达性…

CnosDB 签约京清能源,助力分布式光伏发电解决监测系统难题。

近日&#xff0c;京清能源采购CnosDB&#xff0c;升级其“太阳能光伏电站一体化监控平台”。该平台可以实现电站设备统一运行监控&#xff0c;数据集中管理&#xff0c;为操作人员、维护人员、管理人员提供全面、便捷、差异化的数据和服务。 京清能源集团有限公司&#xff08;…

【LeetCode】35.复杂链表的复制

题目 请实现 copyRandomList 函数&#xff0c;复制一个复杂链表。在复杂链表中&#xff0c;每个节点除了有一个 next 指针指向下一个节点&#xff0c;还有一个 random 指针指向链表中的任意节点或者 null。 示例 1&#xff1a; 输入&#xff1a;head [[7,null],[13,0],[11,4]…

并发-Executor框架笔记

Executor框架 jdk5开始&#xff0c;把工作单元与执行机制分离开来&#xff0c;工作单元包括Runable和Callable&#xff0c;执行机制由Executor框架来提供。 Executor框架简介 Executor框架的两级调度模型 Java线程被一对一映射为本地操作系统线程 java线程启动会创建一个本…