微信改版,加星标不迷路!

每日一算法-移除元素

作者:阿广

阅读目录

? 题目

? 解析

? 完整代码

1 题目


给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。

不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。

元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

示例 1:

给定 nums = [3,2,2,3], val = 3, 函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。 你不需要考虑数组中超出新长度后面的元素。

示例 2:

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

说明:

为什么返回数值是整数,但输出的答案是数组呢?

请注意,输入数组是以“引用”方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。

你可以想象内部操作如下:

// nums 是以“引用”方式传递的。也就是说,不对实参作任何拷贝 int len = removeElement(nums, val); // 在函数里修改输入数组对于调用者是可见的。 // 根据你的函数返回的长度, 它会打印出数组中该长度范围内的所有元素。 for (int i = 0; i < len; i++) {     print(nums[i]); }


2 解析

思路

既然问题要求我们就地删除给定值的所有元素,我们就必须用 O(1) 的额外空间来处理它。如何解决?我们可以保留两个指针 i 和 j,其中 i 是慢指针,j 是快指针。

算法

当 nums[j]与给定的值相等时,递增 jj 以跳过该元素。只要 nums[j] != val,我们就复制 nums[j] 到 nums[i] 并同时递增两个索引。重复这一过程,直到 j 到达数组的末尾,该数组的新长度为 i。

该解法与 删除排序数组中的重复项 的解法十分相似。

3 完整代码


class Solution {
public:
   int removeElement(vector<int>& nums, int val) {
       int i = 0;
       for(int j = 0 ; j < nums.size() ; j++){
           if(nums[j] != val){
               nums[i] = nums[j];
               i++;
           }
       }
       return i;
   }
};


4 结果

今日问题

用一个段子解释一个技术,畅所欲言!

打卡格式:打卡第n天,答:...

为什么打卡?戳下面你就知道了!

21/天/养/一/个/好/习/惯

【每日一算法】移除元素相关推荐

  1. c++两个数组对比去掉重复的元素_每日一道 LeetCode (8):删除排序数组中的重复项和移除元素...

    ❝ 每天 3 分钟,走上算法的逆袭之路. ❞ 前文合集 每日一道 LeetCode 前文合集 代码仓库 GitHub:https://github.com/meteor1993/LeetCode Gi ...

  2. 代码随想录算法训练营第一天 704 二分查找、27 移除元素

    代码随想录算法Day1 | 704. 二分查找.27. 移除元素 Last edited time: April 5, 2023 11:27 AM 数据理论基础 数组是存放在连续内存空间上的相同类型数 ...

  3. JS算法笔记---移除元素

    移除元素 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度. 示例 1: 给定 nums = [3,2,2,3], val = 3, ...

  4. 代码随想录算法训练营第一天|704二分查找 27移除元素

    理论基础 1.数组是存放在连续内存空间上的相同类型数据的集合 2.数组可以方便的通过下标索引的方式获取到下标下对应的数据 3.数组的在内存空间的地址是连续的,所以我们在删除或者增添元素的时候,就难免要 ...

  5. 代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素。

    704. 二分查找 题目链接:704. 二分查找 - 力扣(LeetCode) 第一天代码跑题了,做出来了但是没有使用二分法,看了讲解,对于左闭右闭和左闭右开还需要多思考,并没有完全理解.那就先总结一 ...

  6. 代码随想录算法训练营第一天 | 数组理论基础,704. 二分查找,27. 移除元素

    今日学习的文章链接如下: 代码随想录 (programmercarl.com) 代码随想录 (programmercarl.com) 704. 二分查找 自己看到题目的第一想法 拿到题目首先想办法,一 ...

  7. 移除元素(每日一题)

    目录 一.题目描述 二.题目分析 2.1 方法一 2.1.1 思路 2.1.2 代码 2.2 方法二 2.2.1 思路 2.2.2 代码 一.题目描述 题目链接:27. 移除元素 - 力扣(LeetC ...

  8. 算法第一天——移除元素

    常用方法 暴力破解(费时间,效率低) 快慢指针(双指针) 题目 1.移除元素 暴力破解思路: 使用两个for循环嵌套 第一个循环顺序遍历数组 当nums[i]==val 的时候 ,执行第二层循环,将后 ...

  9. 【代码随想录算法练习】| DAY01 | JavaScript | 数组理论基础,704. 二分查找,27. 移除元素

    详细解析:请看Carl老师的讲解 数组基础理论 下标从 0 开始 内存空间地址是连续的 增删元素时,会涉及其他元素地址的变动 704. 二分查找 | 点击查看力扣对应题目 二分法,也叫折半查找法,这里 ...

最新文章

  1. 改名之后的Java EE,现在有什么新进展?
  2. 分层和分段用什么符号_如何划分段落层次,如何给段落分层
  3. Net4.0---VS2010新特性
  4. 鸿蒙系统画饼,任正非说在三年内华为鸿蒙系统即可媲美苹果!真的不是“画饼”?...
  5. Ubuntu中Netbeans的中文问题彻底解决
  6. Android --- Android Device Monitor 在 3.0 版本之后废弃了怎么办
  7. 瑞幸咖啡生,互联网咖啡生;数据死,互联网咖啡死
  8. 苹果数据线不能充电_外媒痛批苹果!iPhone 12不送充电器绝非为环保,理由太真实!|充电器|数据线|手机|iphone...
  9. JavaFX场景切换代码示例
  10. 郑州升达经贸管理学院计算机科学与技术,郑州升达经贸管理学院计算机科学与技术专业2016年在福建理科高考录取最低分数线...
  11. java实现Dijkstra算法
  12. HTTP发包工具 -HTTPie
  13. 微信小程序转发功能的实现
  14. 苹果公司的创始人_世界名校巡礼15——苹果公司创始人的母校加州大学伯克利分校...
  15. 基于STM32HAL库ADS1256调试笔记
  16. 入手评测AMD锐龙r7 6800u和酷睿i7 1260p选哪个 r76800u和i71260p对比
  17. Xmind 8 pro 软件破解版(经济条件允许的情况下,请支持正版)
  18. JavaScript.笔记
  19. matlab—多行注释
  20. Python语言学习之关于quote()使用

热门文章

  1. 新年快到了,让我们一起用 Python 编织中国结吧
  2. 几经沉浮,人工智能前路何方?
  3. “崩溃!我再也不搞 AI 了”谷歌 AI 专家:别让你的方法打败你!
  4. 王海峰发布百度智能云最新架构,推出AI中台和知识中台
  5. 今晚20:00 | 港科大郑光廷院士详解人工视觉技术发展及应用
  6. 解读 | 2019年10篇计算机视觉精选论文(上)
  7. 深度学习会议论文不好找?这个ConfTube网站全都有
  8. 腾讯AI开源框架Angel 3.0重磅发布:超50万行代码,支持3种算法,打造全栈机器学习平台...
  9. 掌握哪些机器学习工具更受企业青睐?
  10. 复旦肖仰华:领域知识图谱落地实践中的问题与对策