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

【力扣】27. 移除元素 <快慢指针、首尾指针>

【力扣】27. 移除元素

给你一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,必须仅使用 O(1) 额外空间并原地修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

示例 1:
输入:nums = [3,2,2,3], val = 3
输出:2, nums = [2,2]
解释:函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。你不需要考虑数组中超出新长度后面的元素。例如,函数返回的新长度为 2 ,而 nums = [2,2,3,3] 或 nums = [2,2,0,0],也会被视作正确答案。

示例 2:
输入:nums = [0,1,2,2,3,0,4,2], val = 2
输出:5, nums = [0,1,4,0,3]
解释:函数应该返回新的长度 5, 并且 nums 中的前五个元素为 0, 1, 3, 0, 4。注意这五个元素可为任意顺序。你不需要考虑数组中超出新长度后面的元素。

提示
0 <= nums.length <= 100
0 <= nums[i] <= 50
0 <= val <= 100

题解

把输出的数组直接写在输入数组上。使用双指针:快指针 fast 指向当前将要处理的元素,慢指针 slow 指向下一个将要赋值的位置。

class Solution {public int removeElement(int[] nums, int val) {//用于重新指向新元素int slow = 0;for (int right = 0; right < nums.length; right++) {//不等于 就是要更新数组元素了if (nums[right] != val) {nums[slow] = nums[right];slow++;}}return slow;}
}

优化快慢指针为首尾指针:使用双指针,两个指针初始时分别位于数组的首尾,向中间移动遍历该序列。
要移除的元素恰好在数组的开头,例如序列 [1,2,3,4,5],当 val 为 1 时,需要把每一个元素都左移一位。注意到题目中说:【元素的顺序可以改变】。实际上可以直接将最后一个元素 5 移动到序列开头,取代元素 1,得到序列 [5,2,3,4],同样满足题目要求。

class Solution {public int removeElement(int[] nums, int val) {int left = 0;int right = nums.length-1;//首尾指针相遇while (left <= right) {//左指针指向等于val,跟right互换,right减1if (nums[left] == val) {nums[left] = nums[right];right--;}//不然左移左指针else {left++;}}return left;}
}

相关文章:

【力扣】27. 移除元素 <快慢指针、首尾指针>

【力扣】27. 移除元素 给你一个数组 nums 和一个值 val&#xff0c;你需要原地移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。不要使用额外的数组空间&#xff0c;必须仅使用 O(1) 额外空间并原地修改输入数组。元素的顺序可以改变。你不需要考虑数组中超…...

【每日一题】—— C. Challenging Cliffs(Codeforces Round 726 (Div. 2))

&#x1f30f;博客主页&#xff1a;PH_modest的博客主页 &#x1f6a9;当前专栏&#xff1a;每日一题 &#x1f48c;其他专栏&#xff1a; &#x1f534; 每日反刍 &#x1f7e1; C跬步积累 &#x1f7e2; C语言跬步积累 &#x1f308;座右铭&#xff1a;广积粮&#xff0c;缓称…...

想在金融界拥有一席之地吗—社科院杜兰大学金融管理硕士助你圆梦

追求高学历是为了什么&#xff1f;一纸证书吗&#xff1f;显然并非如此&#xff0c;只有读过研的人才有话语权。在上升一个平台后&#xff0c;你必然会发现&#xff0c;更高学历得到的不止是一张文凭。而是更大的平台、更广阔的视野、更包容的环境&#xff0c;更多样的文化。最…...

Moonbeam与Nodle网络集成,增添物联网功能

领先的波卡跨链互连开发平台Moonbeam近期宣布与Nodle Network达成XCM集成&#xff0c;将NODL Token带到Moonbeam生态之中。本次集成将会开启波卡中Moonbeam和Nodle网络以及通过Moonbeam互连合约相连的远程链之间的流动性。 Nodle网络是一个为物联网&#xff08;Internet of Th…...

关于docker 在ubuntu16.04 上的安装

https://www.sohu.com/a/708313241_121368355 参考教程&#xff1a; https://www.runoob.com/docker/docker-image-usage.html 镜像网址 https://hub.docker.com/...

Cmder启动加速

Cmder是一个比较好用的命令行工具&#xff0c;可以通过修改默认Git地址提高启动速度&#xff1a; 打开vendor/init.bat添加本机Git地址&#xff0c;并且打开启动时间显示 :: Use /v command line arg or set to > 0 for verbose output to aid in debugging. set GIT_INSTA…...

【windows】windows上如何使用linux命令?

前言 windows上的bat命令感觉不方便&#xff0c;想在windows上使用linux命令。 有人提供了轮子&#xff0c;本文简单介绍一些该轮子的安装与使用&#xff0c;希望能够帮助到和我有一起需求的网友。 我的答案是busybox。 1.安装busybox.exe 在这个网站上安装busybox busyb…...

Docker Compose: 集合管理Docker的工具安装

Docker Compose:集合管理多个Docker容器的工具&#xff0c;在安装docker时windows,macos默认安装Docker Compose&#xff0c;linux需要自己手动安装 去官网https://github.com/docker/compose/releases下载需要的版本$ sudo chmod x ./docker-compose-linux-x86_64$ sudo cp .…...

Jmeter(三) - 从入门到精通 - 测试计划(Test Plan)的元件(详解教程)

1.简介 上一篇中已经教你如何通过JMeter来创建一个测试计划&#xff08;Test Plan&#xff09;&#xff0c;那么这一篇我们就将JMeter启动起来&#xff0c;创建一个测试计划&#xff08;Test plan&#xff09;&#xff0c;然后给大家介绍一下测试计划&#xff08;Test Plan&am…...

20天学会rust(一)和rust say hi

关注我&#xff0c;学习Rust不迷路 工欲善其事&#xff0c;必先利其器。第一节我们先来配置rust需要的环境和安装趁手的工具&#xff0c;然后写一个简单的小程序。 安装 Rust环境 Rust 官方有提供一个叫做 rustup 的工具&#xff0c;专门用于 rust 版本的管理&#xff0c;网…...

嵌入式传感器将是未来智能交通发展的关键

随着移动即服务&#xff08;MaaS&#xff09;被视为智能移动的关键要素&#xff0c;对增长至关重要的一大因素是机器人车辆技术&#xff0c;而机器人技术又将高度依赖嵌入式传感器。 在这种情况下&#xff0c;高端传感器技术和原始计算能力将成为持续不断的市场扰乱的核心&…...

Vue3 实现产品图片放大器

Vue3 实现类似淘宝、京东产品详情图片放大器功能 环境&#xff1a;vue3tsvite 1.创建picShow.vue组件 <script lang"ts" setup> import {ref, computed} from vue import {useMouseInElement} from vueuse/core/*获取父组件的传值*/ defineProps<{images:…...

机器学习笔记 - 使用 YOLOv5、O​​penCV、Python 和 C++ 检测物体

一、YOLO v5简述 YOLO v5虽然已经不是最先进的对象检测器,但是YOLOv5 使用了一个简单的卷积神经网络 CNN架构(相对YOLO v8来讲,不过v8精度是更高了一些),更易理解。这里主要介绍如何轻松使用 YOLO v5来识别图像中的对象。将使用 OpenCV、Python 和 C++ 来加载和调用我们的…...

使用手机相机检测电脑屏幕刷新率Hz

使用手机相机检测电脑屏幕刷新率Hz 1、电脑打开https://www.testufo.com/frameskipping 2、相机专业模式&#xff1a;快门1/10、ISO自动&#xff0c;拍摄一张照片。120Hz至少要有12个亮块&#xff0c;50Hz至少有6个亮块。 更改刷新速率 1、选择 “开始>设置>系统>显示…...

修改k8s pod的挂载目录

1、找到挂载的服务 kubectl get service2、编辑pod的环境配置 kubectl edit deployment vendor-basic-bill-executor3、找到需要挂载的目录...

Vue3+SpringBoot快速开发模板

起因&#xff1a;个人开发过程经常会使用到Vue3SpringBoot技术栈来开发项目&#xff0c;每次在项目初始化时都需要涉及一些重复的整理工作&#xff0c;于是结合一些个人觉得不错的前后端模板进行整合&#xff0c;打通一些大多数项目都需要的实现的基础功能&#xff0c;以便于快…...

CSDN竞赛68期

CSDN竞赛68期 CSDN竞赛68期1.小球游戏2.王子闯闸门分析 CSDN竞赛68期 1.小球游戏 这个是64期的题目&#xff0c;完全一样&#xff0c;有点无语了&#xff0c;竟然又出了&#xff0c;真不知道怎么出的题。 参考&#xff1a;CSDN周赛64期 2.王子闯闸门 波斯王子要去救被贾法尔…...

Redis入门

目录 一、Redis简介 二、主要特点 三 、Redis的下载与安装 1.2.1 Redis下载 1.2.2 Redis安装 1.3 Redis服务启动与停止 1.3.1 服务启动命令 1.3.2 客户端连接命令 1.3.3 修改Redis配置文件 1.3.4 Redis客户端图形工具 一、Redis简介 Redis是一个基于内存的key-value…...

[CrackMe]BuLLeT.exe的逆向及注册机编写

Delphi写的, 其实这个crackme很弱鸡, 但我还是花了好几个小时逆向, 一来是因为我第一次逆向delphi程序, 二来里面有很多转换函数, 我以为是加密函数, 结果一个个分析花了很多时间。但感觉学到了不少。 查壳发现加了一个WWPACK壳(没见过这种壳)。 进去之后不是在ntdll.dll里面,…...

C++ 中 int、short、long和long long 分别是几位?有符号无符号有什么区别?

在C中&#xff0c;不同的数据类型表示不同范围的整数值。以下是各种整数数据类型的位数和范围&#xff1a; int: 通常为32位&#xff0c;表示带符号的整数&#xff0c;范围约为 -2,147,483,648 到 2,147,483,647。 short: 通常为16位&#xff0c;表示带符号的短整数&#xff0…...

基于SpringBoot+Vue的Web在线考试系统管理系统设计与实现【Java+MySQL+MyBatis完整源码】

摘要 随着信息技术的快速发展&#xff0c;传统线下考试模式逐渐暴露出效率低下、管理成本高、易受人为干扰等问题。在线考试系统因其高效、灵活、可扩展的特性&#xff0c;成为教育信息化改革的重要方向。尤其在新冠疫情背景下&#xff0c;远程教育和无接触考试需求激增&#x…...

Kimi-VL-A3B-Thinking开源可部署:提供ONNX导出路径与推理引擎适配

Kimi-VL-A3B-Thinking开源可部署&#xff1a;提供ONNX导出路径与推理引擎适配 1. 模型简介 Kimi-VL-A3B-Thinking是一款高效的开源混合专家&#xff08;MoE&#xff09;视觉语言模型&#xff08;VLM&#xff09;&#xff0c;具备以下核心特点&#xff1a; 参数高效&#xff…...

GetQzonehistory:一键备份QQ空间所有说说,让青春记忆永不丢失

GetQzonehistory&#xff1a;一键备份QQ空间所有说说&#xff0c;让青春记忆永不丢失 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾经翻看QQ空间&#xff0c;发现早期的说说已…...

3步解锁旧内核:KernelSU在Linux 4.14+设备上的完整适配指南

3步解锁旧内核&#xff1a;KernelSU在Linux 4.14设备上的完整适配指南 【免费下载链接】KernelSU A Kernel based root solution for Android 项目地址: https://gitcode.com/GitHub_Trending/ke/KernelSU 你是否还在为Android设备的内核版本过低而无法使用KernelSU感到…...

MySQL数据库备份实战:全量、增量、差异备份到底怎么选?

MySQL数据库备份实战&#xff1a;全量、增量、差异备份到底怎么选&#xff1f; 作为数据库管理员&#xff0c;每天最担心的莫过于数据丢失。记得去年我们团队遇到过一次硬盘故障&#xff0c;当时如果没有完善的备份策略&#xff0c;后果不堪设想。选择正确的备份方式不仅关系到…...

PaveBench:一个用于路面病害感知与交互式视觉语言分析的多功能基准

作者 Dexiang Li, Zhenning Che, Haijun Zhang∗, Dongliang Zhou∗, Zhao Zhang, Yahong Han ∗ 通讯作者 https://arxiv.org/pdf/2604.02804v1 摘要 路面状况评估对道路安全与养护至关重要。现有研究已取得显著进展。然而&#xff0c;大多数研究侧重于分类、检测和分割等传统…...

Janus-Pro-7B惊艳效果:同一张建筑照片生成写实/水彩/线稿三种风格图

Janus-Pro-7B惊艳效果&#xff1a;同一张建筑照片生成写实/水彩/线稿三种风格图 1. 从一张照片到三种艺术风格 想象一下&#xff0c;你手里有一张普通的建筑照片&#xff0c;可能是你旅行时拍的&#xff0c;也可能是工作中需要用的素材。现在&#xff0c;你希望它能变成三种完…...

Intv_AI_MK11 Python数据分析搭档:环境配置与自动化脚本生成

Intv_AI_MK11 Python数据分析搭档&#xff1a;环境配置与自动化脚本生成 1. 为什么需要AI辅助的数据分析环境 数据分析师每天要处理大量重复性工作&#xff1a;数据清洗、报告撰写、图表生成。这些工作既耗时又容易出错。Intv_AI_MK11作为新一代AI助手&#xff0c;可以帮你自…...

tts-vue本地语音合成解决方案:从技术原理到生产实践

tts-vue本地语音合成解决方案&#xff1a;从技术原理到生产实践 【免费下载链接】tts-vue &#x1f3a4; 微软语音合成工具&#xff0c;使用 Electron Vue ElementPlus Vite 构建。 项目地址: https://gitcode.com/gh_mirrors/tt/tts-vue 一、破解本地化语音合成的技…...

S2-Pro代码解释器效果展示:理解并调试复杂C语言程序

S2-Pro代码解释器效果展示&#xff1a;理解并调试复杂C语言程序 1. 效果亮点开场 最近在测试S2-Pro的代码解释能力时&#xff0c;遇到了一段让我印象深刻的C语言代码。这段代码涉及指针操作、动态内存分配和复杂逻辑判断&#xff0c;即使是经验丰富的开发者也需要花些时间才能…...