当前位置: 首页 > 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();}
};

相关文章:

  • 睡岗检测算法AI智能分析网关V4全场景智能守护,筑牢安全效率防线
  • UE5 学习系列(三)创建和移动物体
  • 【QT】自动更新库QSimpleUpdater使用实例封装
  • 在微服务架构中,怎么搭建Maven私服
  • eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
  • 力扣HOT100之堆:215. 数组中的第K个最大元素
  • docker 安装 milvus standalone 版本 + attu
  • spark数据处理练习题番外篇【下】
  • 空间注意力机制
  • 如何判断一个bug,是前端还是后端的?
  • 积累-Vue.js 开发实用指南:ElementUI 与核心技巧
  • 【动作】动作标签分类的三大模块
  • 如何在看板中体现优先级变化
  • 【沉浸式求职学习day53】【Spring】
  • 3.3.1_1 检错编码(奇偶校验码)
  • 智能呼入系统助力酒店客服服务
  • 立足数字人文,深化历史叙事|科学智能赋能人文社科领域研究
  • 扁平表+递归拼树思想
  • PyTorch终极实战:从自定义层到模型部署全流程拆解​
  • JS深入之从原型到原型链
  • web登录页面设计html代码/赣州seo唐三
  • 漳州企业网站建设制作/贵州整站优化seo平台
  • 电商主图设计网站/怎么自己弄一个网站
  • 网站设计怎么做链接/图片外链生成工具在线
  • 自己做网站卖货多少钱/快速排名seo
  • HTML可以做彩票网站吗/百度竞价多少钱一个点击