要求
给定一个数组和一个值,原地移除数组内所有值等于给定值的元素,并返回新数组的长度
思路
遍历数据过程中遇到等于目标值就直接跳过,不等于目标值就赋值
须知
1.数组生成的那一刻就已经定义好了他的内存大小,无法删除内部的某一位置的元素,只能覆盖。内存中长度不变
2.双指针法 核心在于偏移和赋值的先后顺序
常规解法
public function removeElement()
{
$val = 3;
$array = [3,2,2,3];
$num = 0;
foreach ($array as $k => $v) {
if ($val == $v){
unset($array[$k]);
}
$num++;
}
return $num;
}
双指针解法
public function removeElement1()
{
$val = 2;
$array = [0,1,2,2,3,0,4,2];
$num = count($array);
if ($num<=1)return $array;
$slow = 0;
for ($fast=0;$fast<$num;$fast++){
if ($array[$fast] != $val){
if ($slow != $fast) {
$array[$slow] = $array[$fast];
}
$slow++;
}
}
return $slow;
}
