《数组》--DAY2--快慢指针法
1.什么是双指针?
双指针,指的是在遍历对象的过程中,不是普通的使用单个指针进行访问,而是使用两个相同方向(快慢指针)或者相反方向(对撞指针)的指针进行扫描,从而达到相应的目的。
2.快慢指针
2.1解释
快慢指针也是双指针,但是两个指针从同一侧开始遍历数组,将这两个指针分别定义为快指针(fast)和慢指针(slow),两个指针以不同的策略移动,直到两个指针的值相等(或其他特殊条件)为止,如fast每次增长两个,slow每次增长一个。

2.2题目解析
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。
不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并原地修改输入数组。
元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
示例 1: 给定 nums = [3,2,2,3], val = 3, 函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。 你不需要考虑数组中超出新长度后面的元素。
示例 2: 给定 nums = [0,1,2,2,3,0,4,2], val = 2, 函数应该返回新的长度 5, 并且 nums 中的前五个元素为 0, 1, 3, 0, 4。
(本题可采用双指针法)
- 快指针:寻找新数组的元素,新数组就是不含有目标元素的数组
- 慢指针:指向更新新数组下标的位置,用来新数组的索引
![]()
代码实现:
class solution
{
public:
int removeElement(vector<int> &nums, int val)
{
int count = 0;
for(int i=0; i< nums.size();i++)
{
if(nums[i] != val)
nums[count++] = nums[i];
}
}
return count;
};
3.总结
双指针(尤其是快慢指针)通过高效的双指针协同,能在不额外分配空间的条件下解决数组/链表问题。关键是通过指针的分工(遍历 vs. 记录),将时间复杂度优化至线性,是算法中常用优化技巧。

浙公网安备 33010602011771号