移除元素:原地去除特定元素的神奇操作

简介: 在本篇文章中,我们将探讨题目 "移除元素",要求在给定一个数组 nums 和一个值 val 的情况下,原地移除所有数值等于 val 的元素,并返回移除后数组的新长度。我们将会深入解析如何使用双指针技巧,实现一个高效的算法来解决这个问题。


在本篇文章中,我们将探讨题目 "移除元素",要求在给定一个数组 nums 和一个值 val 的情况下,原地移除所有数值等于 val 的元素,并返回移除后数组的新长度。我们将会深入解析如何使用双指针技巧,实现一个高效的算法来解决这个问题。


解析题意

题目要求我们原地移除数组中所有数值等于 val 的元素,并返回移除后数组的新长度。需要注意的是,题目中要求使用 O(1) 额外空间并原地修改输入数组。


双指针法

为了实现原地移除元素,我们可以使用双指针的技巧。我们使用一个快指针 fast 遍历整个数组,同时使用一个慢指针 slow 来记录不等于 val 的元素。当 fast 指针指向的元素等于 val 时,我们将 fast 指针后移一位,继续寻找下一个不等于 val 的元素。如果 fast 指针指向的元素不等于 val,我们将其赋值给 nums[slow],然后将 fast 和 slow 指针都后移一位。


这样,当遍历完成后,slow 指针的位置就是移除了所有等于 val 的元素后的数组长度。


代码实现

这里笔者用一个C++函数实现了


class Solution {

public:

   int removeElement(vector<int>& nums, int val) {

       int n = nums.size();

       int slow = 0;

     

       for (int fast = 0; fast < n; fast++) {

           if (nums[fast] != val) {

               nums[slow] = nums[fast];

               slow++;

           }

       }

     

       return slow;

   }

};

原地操作的神奇之处

通过双指针法,我们成功地实现了原地去除数组中指定元素的操作。这种方法不仅高效,而且没有使用额外的数组空间,完美满足了题目的要求。


总结收获

在这篇文章中,我们深入解析了 "移除元素" 这个问题。通过使用双指针技巧,我们实现了一个高效的算法,原地去除了数组中指定的元素,同时返回了新的数组长度。这个问题让我们更深刻地理解了双指针法的应用,也感受到了原地操作的神奇之处。

目录
相关文章
|
7月前
|
前端开发 Java
java前端:删除数组中指定元素的方法
java前端:删除数组中指定元素的方法
116 1
|
存储
顺序表oj--移除元素&&删除重复项&&合并两个有序数组
顺序表oj--移除元素&&删除重复项&&合并两个有序数组
107 0
|
7月前
27. 移除元素 88. 合并两个有序数组
27. 移除元素 88. 合并两个有序数组
40 0
|
7月前
|
索引
将数组指定索引位置的元素 移动到 目标索引位置,且不改变其他元素原本的顺序,注意这个不是对调元素位置,是移动某一个元素位置不影响其他元素顺(使用场景:拖拽改变数据的顺序,点击上下左右箭头移动元素顺序)
将数组指定索引位置的元素 移动到 目标索引位置,且不改变其他元素原本的顺序,注意这个不是对调元素位置,是移动某一个元素位置不影响其他元素顺(使用场景:拖拽改变数据的顺序,点击上下左右箭头移动元素顺序)
数组相关算法题——LeetCode.27《移除元素》
数组相关算法题——LeetCode.27《移除元素》
|
7月前
|
存储 索引 NoSQL
二叉堆与自定义优先队列实现删除任意元素
二叉堆与自定义优先队列实现删除任意元素
移除元素、合并两个有序数组(leetcode)
移除元素、合并两个有序数组(leetcode)
|
7月前
|
存储 Java
数据结构:图文详解顺序表的各种操作(新增元素,查找元素,删除元素,给指定位置元素赋值)
数据结构:图文详解顺序表的各种操作(新增元素,查找元素,删除元素,给指定位置元素赋值)
269 0
|
存储 JavaScript 前端开发
过滤掉数组中重复的元素
过滤掉数组中重复的元素
55 0
27. 移除元素 26. 删除有序数组中的重复项 88. 合并两个有序数组(双指针遍历)上
27. 移除元素 26. 删除有序数组中的重复项 88. 合并两个有序数组(双指针遍历)上
65 1