27. 移除元素
题目:
分析:
暴力思路:
两层for循环,一层用来查询要删除的数组,另一层循环用于挪动后面的数组。
双指针法:
设定两个快慢指针,同时移动每次都只移动一个数据单位,当第一次遇到我们要寻找的target时,那么slow会停止一次更新,从而其指向的位置就是我们要更新的位置,只需要将fast指向的元素赋值给slow指向的位置处即可。
- fast指针——用于去寻找在新数组中的元素;
- slow指针——用于寻找更新的位置。
代码:
class Solution {
public int removeElement(int[] nums, int val) {
int slow = 0, fast = 0;
while(fast < nums.length){ // 当fast指针没有越界时
if(nums[fast] != val){ // 当fast指针没有遇到要删除的元素时
nums[slow++] = nums[fast++]; // 满指针和快指针同步更新
// 同时,其也作为更新元素的作用
}else{ // 当遇到时,只更新快指针
fast++;
}
}
return slow; // 根据题目要求返回满指针即可。
}
}