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

leetcode27移除元素

本文主要讲解移除元素的要点与细节,按照步骤思考更方便理解

给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。

假设 nums 中不等于 val 的元素数量为 k,要通过此题,您需要执行以下操作:

  • 更改 nums 数组,使 nums 的前 k 个元素包含不等于 val 的元素。nums 的其余元素和 nums 的大小并不重要。
  • 返回 k

c++与java代码如下,末尾

具体要点:

1.  这道题要求我们移除数值等于val的元素,并且是在数组中原地操作,不能使用额外的空间,一提到原地操作,就要想到使用双指针的方法,类似题目。

        即,当我们删除值为val的元素后,我们就要把后面的元素一个个递补上来,补全空缺的位置


2. 既然我们确定使用双指针,那么就要想一下具体使用快慢指针,还是左右指针呢?

        解决这个问题,我们需要考虑一下每个指针的含义:我们需要一个指针去找元素,另一个指针去找位置,把找到符合要求的元素放到正确位置上。以此来实现元素的递补。

所以就要使用快慢指针,其中快指针用来寻找不等于val的元素,慢指针表示递补上来的位置。

        当 nums[fast] != val时,就把该元素放到slow位置上


3.  细节问题

我们需要考虑一下快慢指针的初始化问题,对于初始化,还有其他边界条件,我们可以举个例子

fast到底初始化为0呢,还是1呢?

当fast初始化为0时,表示循环中要对第一个值进行判断是否等于val

当fast初始化为1时,表示循环中不对第一个值进行判断是否等于val,我们就要单独判断一下起始位置。

所以综上,尽量还是fast=0


这道题主要就是考察双指针的思路,并不是那么难,只要搞清楚定义出来的两个指针分别的什么含义,代码也就手到擒来。希望我的讲解能有对你有一点帮助

c++代码如下

#include <vector>
using namespace std;class Solution{
public:int removeElement(vector<int>& nums, int val){int fast = 0, slow = 0;for (fast = 0;fast < nums.size();fast++) {//fast代表元素值//slow代表要放置的位置if (nums[fast] != val) {nums[slow] = nums[fast];slow++;}}return slow;}
};

java代码如下:

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

相关文章:

  • 无版权图片素材搜索网站,解决无版权图片查找问题
  • 逆向学习 MFC 篇:视图分割和在 C++ 的 Windows 窗口程序中添加图标的方法
  • [贪心算法]忍者道具
  • Redis精要
  • yolov8训练中出现问题
  • Linux 一键部署 Nginx1.26.1 + ModSecurity3
  • Docker的常见问题
  • LoRa126X系列LoRa模块:专为物联网设计而生
  • adb 截屏和录屏命令
  • nginx安装教程
  • Python 学习 第四册 第8章 结构化的文本文件
  • 【LeetCode热题 100】三数之和
  • Python日志管理利器:如何高效管理平台日志
  • 【机器学习】智能创意工厂:机器学习驱动的AIGC,打造未来内容新生态
  • CentOS中的rename命令
  • el-input获取焦点 input输入框为空时高亮 el-input值非法时
  • ES6 ...操作符
  • FastReport在线报表设计器工作原理
  • HTML-表单
  • java2019面试题北京
  • JavaScript新鲜事·第5期
  • JS基础之数据类型、对象、原型、原型链、继承
  • k8s如何管理Pod
  • OSS Web直传 (文件图片)
  • Python3爬取英雄联盟英雄皮肤大图
  • React Transition Group -- Transition 组件
  • react-core-image-upload 一款轻量级图片上传裁剪插件
  • Sequelize 中文文档 v4 - Getting started - 入门
  • 高程读书笔记 第六章 面向对象程序设计
  • 关于List、List?、ListObject的区别
  • 解析带emoji和链接的聊天系统消息
  • 聊聊sentinel的DegradeSlot
  • 前端设计模式
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 微信小程序实战练习(仿五洲到家微信版)
  • 2017年360最后一道编程题
  • 好程序员大数据教程Hadoop全分布安装(非HA)
  • ​马来语翻译中文去哪比较好?
  • # 详解 JS 中的事件循环、宏/微任务、Primise对象、定时器函数,以及其在工作中的应用和注意事项
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • (2020)Java后端开发----(面试题和笔试题)
  • (echarts)echarts使用时重新加载数据之前的数据存留在图上的问题
  • (Ruby)Ubuntu12.04安装Rails环境
  • (超详细)语音信号处理之特征提取
  • (附源码)php投票系统 毕业设计 121500
  • (函数)颠倒字符串顺序(C语言)
  • (每日持续更新)jdk api之FileReader基础、应用、实战
  • (七)理解angular中的module和injector,即依赖注入
  • (转)树状数组
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)
  • ./configure,make,make install的作用
  • .[backups@airmail.cc].faust勒索病毒的最新威胁:如何恢复您的数据?
  • .form文件_SSM框架文件上传篇
  • .net core MVC 通过 Filters 过滤器拦截请求及响应内容