27. 移除元素 暴力+快慢指针+相向双指针

news/2025/10/12 17:15:56/文章来源:https://www.cnblogs.com/lf109/p/19136869

27. 移除元素

1、暴力

解题过程

外层循环遍历nums数组,当遇到等于val的元素时,进入内层循环将后续元素均前移一位,覆盖前一个元素。

时间复杂度: O(n^2)

空间复杂度: O(1)

class Solution {public int removeElement(int[] nums, int val) {int n = nums.length;for (int i = 0; i < n; i++) { // 外层循环遍历数组元素if (nums[i] == val) {for (int j = i + 1; j < n; j++) { //内层循环删除等于val的元素(后续元素均前移一位)nums[j - 1] = nums[j];}i--; // nums[i]已被新元素覆盖,尚未判断新元素是否等于valn--; // 未被遍历的元素均前移一位,更新遍历区间的右边界}}return n;}
}

2、快慢指针

解题过程
遍历数组,遇到等于val的元素就向前追加,覆盖前面的旧元素,最终所有有效元素都位于前面。
快指针在旧数组中找非目标元素,然后赋值给慢指针指向的新数组
对于移除元素可以理解为,拿右边 right 所指元素填补左边 left 所指元素的坑,坑就是 left 从左到右遍历过程中遇要的需要删除的元素。

时间复杂度: O(n)
空间复杂度: O(1)

class Solution {public int removeElement(int[] nums, int val) {int count = 0; // 记录有效元素个数for (int i = 0; i < nums.length; i++) {if (nums[i] != val) nums[count++] = nums[i]; // 有效元素追加到前面}return count;}
}

3、相向双指针

解题过程
left,right初始化为数组的左、右边界。若nums[left] == val,left 位置的元素需要被覆盖,直接用 right 所指元素覆盖,更新 right 指向下一个可用于(等于val、不等于val都可以)覆盖的元素;若nums[left] != val,left 位置的元素不用被覆盖 更新 left 指向下一个新元素。重复上面的过程,直至 left > right。

时间复杂度: O(n)
空间复杂度: O(1)

class Solution {public int removeElement(int[] nums, int val) {int left = 0;int right = nums.length - 1;while (left <= right) {if (nums[left] == val) { // left所指元素需要被覆盖nums[left] = nums[right]; // 直接将right所指元素覆盖到left位置,未判断该元素是否等于val,左边界left 不动,在下一次循环判断该元素right--; // 更新右边界,right 指向下一个用来覆盖的元素} else {left++;}}return left;}
}

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

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

相关文章

ST表学习笔记

前置知识:倍增 其实倍增就是二进制拆分,因为有的数可能很大,我们按照2的幂次去查询,就能用 \(log_2n\) 的时间复杂度求解 ST 表 创建 ST 表运用的是倍增思想,我们可以用 \(O(nlogn)\) 的时间创建一个二维表,根据…

谈一类易实现的非四毛子线性 RMQ

考虑设 \(B=64\),每 \(64\) 个元素分一块。 处理跨块查询 这样的查询,是由一段的后缀拼上若干整块拼上一段前缀。 因此我们维护每个块的前后缀最值以及将每一块的最值拿出建立 \(ST\) 表。 复杂度 \(O(n+\frac{n}{B}…

我们学会在具体情境中做出恰当判断

当前AI的"情感"本质是数据驱动的符号运算。虽然能通过分析人类表情、语言模式生成"合理"回应,但缺乏神经递质调节和生物电信号支持5。例如,AI可以模仿安慰人的语言,却不会因共情而失眠,也不会…

【教程】无需第三方应用,Windows自带邮箱如何绑定QQ邮箱等第三方邮箱

无需第三方应用,Windows自带邮箱如何绑定QQ邮箱等第三方邮箱前言 CSDN主页:https://blog.csdn.net/rvdgdsva 博客园主页:https://www.cnblogs.com/hassle微软的 Outlook 按下win键弹出搜索栏,搜索栏输入邮件就会弹…

ubuntu默认桌面解决vnc灰屏

ubuntu默认桌面解决vnc灰屏一、安装vncserver sudo apt-get install tightvncserver 二、创建/关闭端口 # 创建端口 vncserver :1 -geometry 1920x1000 -depth 24# 关闭端口 vncserver -kill :1 三、解决VNC连接后灰…

2025婚纱摄影影楼权威推荐榜:专业团队与创意拍摄打造梦幻婚礼

随着婚庆行业的不断发展,越来越多的新人开始注重婚纱照的质量和创意。选择一家专业的婚纱摄影影楼,不仅能够记录下美好的瞬间,还能为婚礼增添更多浪漫与回忆。为了帮助筛选婚纱照哪家影楼更专业品牌,特此发布权威推…

分布式结构化存储系统-HBase访问方式

分布式结构化存储系统-HBase访问方式 HBase提供了多种访问方式,包括HBase shell,HBase API,数据收集组件(比如Flume,Sqoop等),上层算框架以及Apache Phoenix等,本篇博客将详细介绍这几种方式。 一.HBase Shell…

智能(embodied AI)、机器人视觉 + 交互、边缘 AI

智能(embodied AI)、机器人视觉 + 交互、边缘 AI智能(embodied AI)、机器人视觉 + 交互、边缘 AI 智能(embodied AI)、机器人视觉 + 交互、边缘 AI 智能(embodied AI)、机器人视觉 + 交互、边缘 AI 智能(embo…

【Azure APIM】自建网关(self-host gateway)收集请求的Header和Body内容到日志中的办法

问题描述 使用 Azure API Management(APIM)时,需要记录每个 API 请求的 Header 和 Body,以便进行问题排查和审计,如何配置才能完整捕获这些信息呢?问题解答 在配置API的时候,启用 trace 策略来收集 inbound / …

[JAVA]JDK多版本设置

[JAVA]JDK多版本设置windows环境背景: 经常会遇到不同项目,需要不同版本的jdk版本,每次都需要手工修改环境变量 我这里遇到需要分别使用jdk1.8和jdk17解决: 通过bat设置好版本,通过脚本实现反复快速修改。 @echo …

Google Veo3生成跳舞视频

Google Veo3生成跳舞视频背景 Google Veo 3 是谷歌 DeepMind 于 2025 年 5 月推出的第三代 AI 视频生成模型,在视听同步、画质表现、创作控制等方面实现了显著突破, 视听协同生成 原生音频同步技术:支持文本或图…

【PolarCTF】stackof

1,pwntools 2,ida pro1. 首先下载文件,得到一个没有后缀名的stack_of文件。拿到ubuntu分别用file和checksec查看。2. 我们可以看到这是一个64位ELF文件,动态链接,符号表未被剥离,看上去没什么保护。 3. 接着拿到…

我们离“科幻”还有多远?Yoshua Bengio_From System 1 Deep Learning to System 2 Deep Learning_NeurIPS 2019 感想

我们离“科幻”还有多远?Yoshua Bengio_From System 1 Deep Learning to System 2 Deep Learning_NeurIPS 2019 感想不用我说大伙也知道,近几年来,AI发展极为迅速,对我们的生活和发展产生了巨大的影响;我自己很深…

C# console get current screen DPI from user32.dll and gdi32.dll

using System.Runtime.InteropServices;namespace ConsoleApp24 {internal class Program{ [DllImport("user32.dll")]static extern bool SetProcessDPIAware();[DllImport("user32.dll")]static…

冬天快乐

济南的秋雨,往往摆出一副生人勿近的冷淡模样,默默撑起一片云当做遮阳伞、或者吞吐着光线,叫人难以分辨雨丝的形态;有时甚至连一点声音的余地也不留下,只有叫你伸出手并深吸一口温柔的秋香,才算是通过了她共舞的申…

新生赛 F,H,J 题解

F. 金苹果 搜索题。 首先在输入中记录点 \(S,P,T\) 的坐标。 第一问,搜索要求不经过点 \(P\),可以将 px,py 记录成 #,然后从 \(S\) 开始搜(dfs 或 bfs 均可)能不能到达 \(T\)。 第二问,从 \(S\) 出发能否先经过 …

pycharm跑python项目易出错的困难

pycharm跑python项目易出错的困难pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco&q…

双端队列的0-1BFS

问题: B. Labyrinth 代码: #include<bits/stdc++.h> using namespace std; #define int long long #define ll long long #define fi first #define se second #define vi vector<int> #define vll vecto…

Python psycopg2 类库使用学习总结

实践环境 openGauss 6.0.0 TLS企业版 python3 .9.13 psycopg2 2.9.10 实践操作 # -*- coding:utf-8 -*-import psycopg2if __name__ == __main__: # 连接方式1# connection_str = host=192.168.88.139 port=15400 d…

[GenAI] RAG架构演进

RAG架构演进 RAG 的概念和思想最早是在 2020 年由 Meta 公司的技术团队在文章 “Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks” 中正式提出的,用于给当时已经开始出现的大型预训练语言模型提供…