题目描述
本题要求在固定长度数组中复写每个 0 并右移其余元素,且需满足原地修改、不使用额外数组空间的约束。正向遍历易导致后续元素被覆盖,为此采用双指针配合逆向填充的策略。
思路分析
1. 找到复写的最后一个数
定义两个指针:cur 遍历原数组,pre 模拟复写后的数组指针;
cur==0时,pre向后移动两位(因为要复写 0);cur!=0时,pre向后移动一位;- 当
pre >= n-1时,停止遍历,这时cur指的就是要复写的最后一个元素。

边界情况:如果 pre == n,说明要复写的最后一个元素是 0,这里单独处理。
将数组最后一位改为 0,也就是 arr[n-1]=0;cur 向前移动一位,pre 向前移动两位。

2. 开始从后往前复写
从 向前遍历:



