代码解读

a.php
function removeDuplicates(&$nums) {
    $n = count($nums);
    if ($n === 0) {
        return 0;
    }
    
    $i = 0;  // 慢指针
    
    for ($j = 1; $j < $n; $j++) {  // $j 是快指针
        if ($nums[$j] !== $nums[$i]) {
            $i++;
            $nums[$i] = $nums[$j];
        }
    }
    
    return $i + 1;  // 返回长度
}
$nums = [1, 1, 2, 2, 3, 4, 4, 4, 5];
$count = removeDuplicates($nums);

echo "唯一元素数量: " . $count . "\n";  // 输出: 5
print_r(array_slice($nums, 0, $count));  // 输出: [1, 2, 3, 4, 5]

太史公曰:这里定义了一个函数,目的是移除数组中重复的元素,然后返回数组的个数,开始怎么处理的,先查一下,没有元素,直接返回0,然后是定义了两个指针,什么是指针呢,不知道,可以先理解为数组的下标,从0开始,另一个从1开始,都往后跑,怎么判断呢,看1和0是否相等,不等,加1,然后把1的值再给1,这会不会很奇怪,操作的还是原数组,第1个值,也就是下标为0的,这个是不变的,不等,那么第二个数也存一下,假如说相等呢,这个数空着,然后比较下一个,整体来讲,相当于还是数组的重新赋值,不等,存值,一个一个存,数组过一遍,然后再修改值,结果是怎样的,原数组的元素个数是不变的,但是前面几个的是处理过的,去重的,最后为什么加1呢,因为0是1,这里是下标,默认有第一个数,比如说数组是5个2,第一个2先存在,相等,不处理,一直到最后,还是0,也就是说现在有一个

看别人写的,对对对,自己为什么想不到这些呢,因为你不是别人吗,因为你先看到别人的吗,也对,是吧,看到即存在,这个时候你的还不存在呢,所以,不必感叹吗,这是解读,本就是落后一招,就好像长安三万里里的李白一样,你再牛,你牛得过时间?诗有先后的,当然你可以写出自己的版本,但终归是差了一招,也就是说感慨是免不了的