快 慢 指 针 \color{blue}{快慢指针} 快慢指针
1、首先什么是快慢指针呢?
利用不同速度的"指针"来解决一些实际问题。主要应用在数组、链表、序列中。
2、LeetCode 27. 移除元素
(1) 以这道题为例,来简述快慢指针的应用
(2) 快指针fast指向当前要对比的元素,慢指针slow指向将要赋值的元素。
(3)遍历数组,如果 nums[fast] != val
,说明是我们要保留的元素,将当前快指针指向的元素赋值给慢指针指向的位置。nums[slow] = nums[fast]
在完成赋值之后,要移动慢指针的位置到下一位,因为在外层for循环中已经完成了快指针的移动,所以不需要再对快指针进行操作了。
相反,如果满足要删除元素的条件了,无需对慢指针进行操作,直接向后移动一次快指针即可。
(4)在完成数组的便利之后,因为slow是从零开始的,所以此时slow的值就是要保留的元素组成的数组的长度。
3.代码部分
class Solution {
public int removeElement(int[] nums, int val) {
//设置快慢指针
int fast = 0;
int slow = 0;
//设置for循环,快指针遍历整个数组
for(; fast < nums.length; fast++){
if(nums[fast] != val){
nums[slow] = nums[fast];
slow++;
}
}
return slow;
}
}