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

LeetCode--27.移除元素

解题思路:

        1.获取信息:

                给定一个数组和一个值,删除数组中等于这个值的值

                要求是,返回数组中不等于这个值的数的数目

                并且要求在数组上删除,不能使用额外辅助空间

                还是给了评测标准(你可以根据它的原理来实现越狱,但不建议,还是老老实实地才能磨练自己哦)我们知道,它是根据你返回的数组中不等于那个值的数的数目来进行查验进行删除后的数组的前几个元素是否与正确答案一致来进行判别的

                所以,数组的大小和除数组前几个元素外的其他元素并不重要

        2.分析题目:

                26题是删除数组中重复的项,与这道题类似,那我们可以尝试使用一下双指针法

                我下面不止有一种方法,各个方法我想借着代码来帮助你理解,在这里就不过多阐述

                有时候碰见一些相似的题,也许它们所考查的方向其实大差不差,可以比对着理解哦

        3.示例查验

                示例1和示例2:数组的大小和除数组前几个元素外的其他元素并不重要

        4.尝试编写代码:

                (1)双指针法

                        思路:准备两个指针,一个放在数组的首位,一个放在数组的末尾,前面的指针查找等于val的数,后面的指针查找不等于val的数,两个指针都找到之后就交换这两个数,再将前面的指针后移一位,后面的指针前移一位,再重复上面的操作

                        当后面的指针比前面的指针靠前的时候,就退出循环,以下是完整代码

class Solution {
public:int removeElement(vector<int>& nums, int val) {int p1=0,p2=nums.size()-1;//准备两个指针while(p1<=p2){//当后面的指针小于前面的指针时if(nums[p1]!=val)p1++;//前面的指针查找等于val的数if(nums[p2]==val)p2--;//后面的指针查找不等于val的数if(p1<p2&&nums[p1]==val&&nums[p2]!=val){//如果满足括号里面的条件,就进行交换swap(nums[p1],nums[p2]);//其实也不用非得交换,直接赋值也行,毕竟余下的元素不重要p1++;p2--;}}return p2+1;//返回数组中不等于val的数的数目}
};

                (2)快慢指针法

                        思路:也是准备两个指针,两个指针的起点都在数组的首位,其中快指针向后查找不等于val的值,查找到了之后,覆盖慢指针指向的数,再将慢指针后移一位,快指针继续查找

以下是完整代码

class Solution {
public:int removeElement(vector<int>& nums, int val) {int slow=0;//慢指针for(int fast=0;fast<nums.size();fast++){//快指针if(nums[fast]!=val)nums[slow++]=nums[fast];}return slow;}
};

                (3)反骨法

                        思路:它说不让用辅助存储空间,你要不要用?要不要用?

                        当然可以使用,但是不建议,耍小聪明始终上不了大雅之堂哦

                        所以,看看就可以了,以下是完整代码

class Solution {
public:int removeElement(vector<int>& nums, int val) {vector<int>res;//准备辅助存储空间for(int& num:nums){//遍历数组if(num!=val)res.push_back(num);//如果某个值不等于val,就放入res中}nums.swap(res);return nums.size();}
};

http://www.xdnf.cn/news/964315.html

相关文章:

  • Leetcode 3578. Count Partitions With Max-Min Difference at Most K
  • HTML 列表、表格、表单
  • Docker-containerd-CRI-CRI-O-OCI-runc
  • 【kafka】Golang实现分布式Masscan任务调度系统
  • Python 自动化临时邮箱工具,轻松接收验证码,支持调用和交互模式(支持谷歌gmail/googlemail)
  • 【C++】26. 哈希扩展1—— 位图
  • 【PhysUnits】17.5 实现常量除法(div.rs)
  • Linux上并行打包压缩工具
  • Cryosparc: Local Motion Correction注意输出颗粒尺寸
  • 基于大模型的输尿管下段结石诊疗全流程预测与方案研究
  • 多场景 OkHttpClient 管理器 - Android 网络通信解决方案
  • 【AI study】ESMFold安装
  • Ribbon负载均衡实战指南:7种策略选择与生产避坑
  • 深度学习核心概念:优化器、模型可解释性与欠拟合
  • 【无标题新手学习期权从买入看涨期权开始】
  • OpenCV 图像像素值统计
  • Python入门手册:常用的Python标准库
  • C++初阶-list的模拟实现(难度较高)
  • C++学习-入门到精通【17】自定义的模板化数据结构
  • ParcelJS:零配置极速前端构建工具全解析
  • React 中的TypeScript开发范式
  • 存储设备应用指导
  • C++ 手写实现 unordered_map 和 unordered_set:深入解析与源码实战
  • 光伏功率预测 | BP神经网络多变量单步光伏功率预测(Matlab完整源码和数据)
  • word嵌入图片显示不全-error记
  • 高考志愿填报,如何查询高校历年录取分数线?
  • Vue 2.0 + C# + OnlyOffice 开发
  • Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
  • K8S容器介绍
  • ubuntu24安装cuda12.6+cudnn9.6