两种解法解决 LeetCode 27. 移除元素【C++】

简介: 两种解法解决 LeetCode 27. 移除元素【C++】


27. 移除元素

题目:移除元素

示例和提示:

解法:

1. 暴力解法

//暴力解法:
//实际上就是遍历数组找到需要删除的元素,然后再嵌套一层循环将该元素后面的依次向前覆盖。
class Solution {
public:
    int removeElement(vector<int>& nums, int val) {
        //为了不让每次循环都调用size()函数:
        int size = nums.size();
        //第一步,遍历目标数组:
        for(int i = 0; i < size; i++)
        {
            //找到需要删除元素的位置;
            if(nums[i] == val)
            {
                //删除元素从前向后遍历:
                for(int j = i+1; j < size; j++)
                {
                    nums[j-1] = nums[j];
                }
                 //这里有一个迭代器失效问题,此时i指向原始数组中被删除元素的下一个位置,外层循环末尾
                 //还会使得i++,没有判断就跳过了这个元素,所以得i--;
            i--;
            size--;
            }
 
        }
        return size;
    }
};

2. 快慢指针

//快慢指针法:
//很酷很丝滑的解法,快指针勇往无前的遍历,慢指针负责将快指针指向位置的元素复制到自己指向的位置,
//当快指针指向位置的元素需要删除时,慢指针停止赋值,直到快指针再次指向一个不需要删除的元素的位置。
class Solution {
public:
    int removeElement(vector<int>& nums, int val) {
        int fastPoit = 0;
        int slowPoit = 0;
        int size = nums.size();
        for( ; fastPoit < size; fastPoit++)
        {
            if(nums[fastPoit] != val)
            {
                nums[slowPoit] = nums[fastPoit];
                slowPoit++;
            }
        }
        //slowPoit此时的指向正是新数组末尾的下一个位置,因为slowPoit++
        //是放在赋值最后执行的,所以刚好也就是新长度:
        return slowPoit;
    }
};

😄 创作不易,你的点赞和关注都是对我莫大的鼓励,再次感谢您的观看😄

相关文章
|
1月前
【力扣】-- 移除链表元素
【力扣】-- 移除链表元素
34 1
|
2月前
|
搜索推荐 编译器 C语言
【C++核心】特殊的元素集合-数组与字符串详解
这篇文章详细讲解了C++中数组和字符串的基本概念、操作和应用,包括一维数组、二维数组的定义和使用,以及C风格字符串和C++字符串类的对比。
78 4
|
1月前
【LeetCode 27】347.前k个高频元素
【LeetCode 27】347.前k个高频元素
32 0
|
1月前
【LeetCode 06】203.移除链表元素
【LeetCode 06】203.移除链表元素
29 0
|
1月前
【LeetCode-每日一题】移除元素
【LeetCode-每日一题】移除元素
31 0
|
3月前
|
存储 算法
LeetCode第83题删除排序链表中的重复元素
文章介绍了LeetCode第83题"删除排序链表中的重复元素"的解法,使用双指针技术在原链表上原地删除重复元素,提供了一种时间和空间效率都较高的解决方案。
LeetCode第83题删除排序链表中的重复元素
|
3月前
|
算法 索引
LeetCode第34题在排序数组中查找元素的第一个和最后一个位置
这篇文章介绍了LeetCode第34题"在排序数组中查找元素的第一个和最后一个位置"的解题方法,通过使用双指针法从数组两端向中间同时查找目标值,有效地找到了目标值的首次和最后一次出现的索引位置。
LeetCode第34题在排序数组中查找元素的第一个和最后一个位置
|
3月前
|
Python
【Leetcode刷题Python】剑指 Offer II 082. 含有重复元素集合的组合
解决LeetCode平台《剑指 Offer II 082. 含有重复元素集合的组合》题目的Python代码实现,通过深度优先搜索算法找出所有和为特定目标值的数字组合,并在搜索过程中通过排序和跳过重复元素来避免解集中出现重复组合。
40 2
|
3月前
|
算法
LeetCode第27题移除元素
这篇文章介绍了LeetCode第27题"移除元素"的解题方法,通过使用双指针技巧,有效移除数组中特定值的元素并返回新数组的长度。
|
3月前
|
算法 索引 Python
【Leetcode刷题Python】34. 在排序数组中查找元素的第一个和最后一个位置(二分查找)
解决LeetCode "在排序数组中查找元素的第一个和最后一个位置" 问题的方法。第一种方法是使用两次二分查找,首先找到目标值的最左边界,然后找到最右边界。第二种方法是利用Python的list.index()方法,先正序找到起始位置,再逆序找到结束位置,并给出了两种方法的Python实现代码。
61 0