注意,在本题中,是对原数组进行操作,需要原地删除指定元素,所以我们可以采用快慢指针来操作。
顾名思义,快慢指针是有两个指针,一直快指针,一个慢指针。在本题中,快慢指针起点都是0,开始的时候,当没有遇到要删除的元素的时候,快慢指针都一步一步向前走,此时即使二者替换也是一样的数据。遇到要删除的元素的时候,这个时候我们先不进行元素的替换,然后把慢指针留下,快指针向前走一步,此时二者之间出现了位移差。然后再继续向后走,如果不是要删除的元素,这时候把快指针位置的元素替换到慢指针的位置,此时就完成了指定元素的删除。
最终我们返回慢指针即可。
class Solution {
public int removeElement(int[] nums, int val) {
// 快慢指针
int slowIndex = 0;
for (int fastIndex = 0; fastIndex < nums.length; fastIndex++) {
if (nums[fastIndex] != val) {
nums[slowIndex] = nums[fastIndex];
slowIndex++;
}
}
return slowIndex;
}
}