![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/a38272fcd3b51bd938e0fa2d5ca5f310.png)
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/6603b0546dc5f80ea48c7a0753e9b88a.png)
方法一:暴力解决
class Solution {
public:
int removeElement(vector<int>& nums, int val)
{
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--;
size--;
}
}
return size;
}
};
方法二:双指针
主要思路:跳过要删除的元素
定义快慢指针,快指针遇到要删除的元素跳过,但快指针始终加一,慢指针只有在满足条件的时候才需要加一
class Solution {
public:
int removeElement(vector<int>& nums, int val)
{
int slow=0;
for(int fast=0;fast<nums.size();fast++)
{
if(nums[slow]!=val)
{
nums[slow++]=nums[fast];
}
}
return slow;
}
};