from typing import List
def remove_zeros_inplace(array: List[int]) -> None:
Removes zeros from array.
Saves ordering of non-zero elements.
Use O(N) time complexity.
Uses O(1) additional memory complexity (works inplace)
Intended use:
array = [0, 1, 0, 2, 0, 3, 0]
remove_zeros_inplace(array)
print(array) # prints [1, 2, 3]
这道题要求你原地删除数组中的所有 0,同时保持非零元素的相对顺序不变,并且只允许 O(1) 额外空间、O(N) 时间完成。典型做法是使用双指针:一个指针遍历数组,另一个指针记录当前应该写入非零元素的位置;遇到非零值就前移写入,最后再把剩余位置补上或通过原地截断达到结果。这个题重点考察的是原地修改数组、双指针 / 快慢指针思想,以及在不额外开辟新数组的前提下维护元素顺序的能力。
正文完