移除元素 leetcode 27

vs中按f12,查看源码
题目

给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。

假设 nums 中不等于 val 的元素数量为 k,要通过此题,您需要执行以下操作:

更改 nums 数组,使 nums 的前 k 个元素包含不等于 val 的元素。nums 的其余元素和 nums 的大小并不重要。
返回 k。

  1. 暴力解
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    class Solution {
    public:
    int count=0;
    int removeElement(vector<int>& nums, int val) {
    for(int i=0;i<=nums.size()-1;i++)
    {
    if(nums[i]==val)
    {
    for(int j=i+1;j<=nums.size()-1;j++)
    {
    if(i==nums.size()-1) break;
    nums[j-1]=nums[j];
    }
    nums.pop_back();
    i--; //此处很关键
    }
    }
    return nums.size();
    }
    private:

    };

ps: 即erase库函数
20250307212921

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Solution {
public:
int count = 0;
int removeElement(std::vector<int>& nums, int val) {
for (int i = 0; i <= nums.size() - 1; i++)
{
if (nums[i] == val)
{
nums.erase(nums.begin()+i); //begin返回的是迭代器
i--; //erase函数会改变数组长度,所以i--

}
}

return nums.size();
}
private:

};

  1. 双指针解
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    class Solution {
    public:
    int count=0;
    int removeElement(vector<int>& nums, int val) {
    int slow=0;
    for(int fast=0;fast<=nums.size()-1;fast++)
    {
    if(nums[fast]!=val)
    {
    nums[slow]=nums[fast];
    slow++;
    }
    }
    return slow;
    }
    private:

    };