移除元素
- 27. 移除元素
- 题目:[移除元素](https://leetcode.cn/problems/remove-element/description/)
- 示例和提示:
- 解法:
- 1. 暴力解法
- 2. 快慢指针
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;
}
};
😄 创作不易,你的点赞和关注都是对我莫大的鼓励,再次感谢您的观看😄