要求
给定一个数组和一个值,原地移除数组内所有值等于给定值的元素,并返回新数组的长度
思路
遍历数据过程中遇到等于目标值就直接跳过,不等于目标值就赋值
须知
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; }