力扣链接:27.移除元素

要求:不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并原地修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

方法一:
思路:利用双指针,头指针指向首元素,尾指针指向最后一个元素。循环中begin指向的值等于val时,判断end所指向的值。

  1. 如果end所指向的值不等于val交换两元素值并移动指针,同时数组大小减一。
  2. 如果end所指向的值等于val,end指针向前移动,同时数组大小减一直到end所指向的值不等于val或退出循环。

需要注意的是循环条件中的" = “, 如果缺少” = "出现一个元素的情况下不会进入循环会出现错误,如图:

具体代码实现如下:

int removeElement(int* nums, int numsSize, int val){int begin = 0,end = numsSize - 1;   //定义两个指针while(begin <= end)     //循环条件begin <= end  (可能存在只有一个元素的情况所以得加上" = "){if(nums[begin] != val)  //头指针不等于val向后走{begin++;}//如果遇见要移除的值并且end所指向的值不等于valelse if(nums[begin] == val && nums[end] != val) {nums[begin] = nums[begin] ^ nums[end]; //交换两个元素nums[end] = nums[begin] ^ nums[end]; nums[begin] = nums[begin] ^ nums[end];end--;      //尾指针向前移动numsSize--;     //数组大小减一begin++;        //交换元素后头指针向后移动}else{      //如果遇见要移除的值并且end所指向的值等于valend--;      //尾指针向前移动(寻找不等于val的元素)numsSize--;     //数组大小减一}}return numsSize;    //返回移除后的数组大小
}

方法二:
思路:不利用双指针,直接循环判断。定义一个变量cnt用于记录数组中val出现的次数,如果遇见val则cnt加一,否则把该值放在数组前面非val的位置 。最后返回原数组大小减去val出现次数(cnt)。
详细操作:以题目中示例1为例
第一步:

第二步:

第三步:

第四步:

具体代码实现如下:

int removeElement(int* nums, int numsSize, int val){int cnt = 0;for(int i = 0; i < numsSize; ++i){if(nums[i] == val){cnt++;}else{nums[i-cnt] = nums[i];}}return numsSize-cnt;
}

LeetCode 27 移除元素 题解相关推荐

  1. lrange是取出所有值并移除么_图解双指针 | LeetCode 27. 移除元素

    题目描述 原题链接:LeetCode 27. 移除元素 给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在 ...

  2. LeetCode 27.移除元素

    原题链接 /** @lc app=leetcode.cn id=27 lang=cpp** [27] 移除元素标签:拷贝覆盖主要思路是遍历数组nums,每次取出的数字变量为num,同时设置一个下标an ...

  3. LeetCode 27移除元素28实现strStr()29两数相除

    维护幸苦,如有打卡欢迎关注公众号bigsai回复进群,如有帮助欢迎点赞支持! 移除元素 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长 ...

  4. 9. Leetcode 27. 移除元素 (数组-同向双指针-快慢指针)

    给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度.不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组.元素 ...

  5. [leetcode]27.移除元素

    给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度. 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组. ...

  6. LeetCode 27.移除元素 思考分析

    题目 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度. 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数 ...

  7. leetcode 27. 移除元素(双指针)

    给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度. 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组. ...

  8. LeetCode 27.移除元素

    文章目录

  9. Leetcode 704.二分查找 27.移除元素 代码随想录day1

    本系列目的在于跟练代码随想录,以及记录自己在数据结构与算法方面的一些学习 704.二分查找 其实之前自己在随便刷题的时候看过这道题目,就是一个纯新手的大状态,第一次听到二分查找这样的东西,然后跟着题解 ...

最新文章

  1. 如何用RHEL System Role把Postfix安装和配置自动化?
  2. 【收藏】生产订单业务流程
  3. PHP用单例模式实现一个数据库类
  4. Visual Studio 2010 sp1
  5. deepin应用分发_Deepin Dock隐藏功能等功能说明
  6. ubuntu16.04安装 java JDK8
  7. iPhone 的续航有望加长!749 元的“磁吸充电宝”你会买吗?
  8. Java网络编程(TCP协议-练习-上传文本文件)
  9. Opencv环境配置
  10. 中标麒麟服务器中安装达梦数据库(DM7)的具体步骤
  11. 鸟哥linux——Ext2文件系统基本原理
  12. 使用Unity3D视频转换器TheoraConverter.NET 1.1 Setup转换视频格式为ogv并播放视频
  13. python-多元线性回归模型
  14. WIFI和路由器密码破解的方法
  15. linux6.5 xmanager配置,CentOS6.5安装Xmanager远程桌面
  16. java中web错误返回码,关于在java程序里调用webservice报500返回码的有关问题
  17. three.js(6):屏幕点击与鼠标的交互(Raycaster的用法)
  18. listview(retrofit)
  19. 借鉴FCoin商业模式,写了一份白皮书去参赛
  20. Excel一键将-替换为--的批量操作

热门文章

  1. 【ElasticSearch系列】ES简介及安装
  2. 3D视觉——线激光测量胶水高度
  3. PS186:你给我翻译翻译什么叫做惊喜
  4. c语言对称矩阵的压缩存储_C++实现对称矩阵的压缩存储 | 术与道的分享
  5. Sorry Redis Desktop Manager Crashed的解决办法
  6. 微信小程序开发者工具怎么使用Less、Sass
  7. python做兼职_“隐形贫困者”自学Python做副业,教你如何月入10000+
  8. 微信商城系统开发具体流程
  9. C# 递归的应用 TreeView递归绑定数据
  10. IT类公司世界500强企业