题目
- 移除元素
对于这个问题,你可以使用双指针法来解决这个问题。(此时时间复杂度为O(n))。
- 初始化两个指针,一个指向数组的当前位置(称为“
慢指针
”),另一个用于遍历数组(称为“快指针
”)。 - 使用快指针遍历数组,如果快指针指向的元素不等于给定的值
val
,则将该元素复制到慢指针
的位置,并将慢指针
向前移动。 - 遍历完成后,慢指针的位置即为新数组的长度。
即我们理解,此题目的要求删除并不是“真正”意义上的删除,而是在我们遍历数组的时候不遍历数组的后半部分即可达到“删除”!
示例
过程详解:
代码
int removeElement(int* nums, int numsSize, int val) {
if(numsSize == 0)
{
return 0;
}
int slow = 0;
int fast = 0;
while(fast < numsSize)
{
if(nums[fast] != val)
{
nums[slow] = nums[fast];
slow++;
}
fast++;
}
return slow;
}