两种解法解决 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;
    }
};

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

相关文章
|
16天前
|
算法 Java C语言
C++和Java中的随机函数你玩明白了吗?内附LeetCode470.rand7()爆改rand10()巨详细题解,带你打败LeetCode%99选手
C++和Java中的随机函数你玩明白了吗?内附LeetCode470.rand7()爆改rand10()巨详细题解,带你打败LeetCode%99选手
【移除链表元素】LeetCode第203题讲解
【移除链表元素】LeetCode第203题讲解
|
1月前
|
存储 安全 编译器
【C++ 关键字 类型限定符 】揭秘C++编程中的神秘元素:深入了解volatile关键字的强大作用
【C++ 关键字 类型限定符 】揭秘C++编程中的神秘元素:深入了解volatile关键字的强大作用
21 0
|
3天前
[leetcode~dfs]1261. 在受污染的二叉树中查找元素
[leetcode~dfs]1261. 在受污染的二叉树中查找元素
[leetcode~dfs]1261. 在受污染的二叉树中查找元素
|
8天前
|
算法
代码随想录算法训练营第五十七天 | LeetCode 739. 每日温度、496. 下一个更大元素 I
代码随想录算法训练营第五十七天 | LeetCode 739. 每日温度、496. 下一个更大元素 I
14 3
|
9天前
|
C++
面向对象的C++题目以及解法2
面向对象的C++题目以及解法2
22 1
|
存储 编译器 Linux
标准库中的string类(中)+仅仅反转字母+字符串中的第一个唯一字符+字符串相加——“C++”“Leetcode每日一题”
标准库中的string类(中)+仅仅反转字母+字符串中的第一个唯一字符+字符串相加——“C++”“Leetcode每日一题”
|
11天前
|
人工智能 C++
查找题(二分解法c++)
查找题(二分解法c++)
22 0
|
11天前
|
安全 C++
石头剪子布(字符串解法 C++)
石头剪子布(字符串解法 C++)
17 0
|
12天前
|
算法
【力扣】169. 多数元素
【力扣】169. 多数元素

热门文章

最新文章