题目
数组问题
- 删除数组元素并不是单纯删除数据,而是将后一个元素覆盖前一个元素的位置,保持数组在内存中的连贯性
快慢指针
- 快指针向前推进,寻找新数组需要的元素
- 慢指针位置是新数组元素的终点位置
- 将思路转化为:创建新数组,主要找的是非val元素
- fast向后遍历,碰到非val元素则将元素放置slow所在位置,之后二者均向后移动一位,方便继续放置元素
图源左下键,侵删
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
//定义快慢指针
int slowIndex = 0;
//元素个数
int size = nums.size();
for(int fastIndex = 0;fastIndex != size;fastIndex++)
{
//转换思路理解为寻找新数组,找非val的元素作为新数组元素,将其前移组成新数组
if(nums[fastIndex] != val)
{
nums[slowIndex] = nums[fastIndex];
slowIndex++;
}
}
return slowIndex;
}
};
还可用暴力法破解,双for循环