本题的目标是将数组中的所有 0 移动到数组末尾,并保持其他非零元素的相对顺序,同时要求 原地修改 数组,即不能复制额外的数组。这意味着我们需要用 双指针 和 原地交换 技巧来高效地解决问题。
我们可以使用 双指针法 来解决这个问题,其中一个指针 j 用来遍历整个数组,另一个指针 i 记录下一个应该放置非零元素的位置。具体做法如下:
i = 0,用于记录非零元素应该存放的位置。i 位置,然后 i 向前移动。给定一个数组nums,将所有 0移动到数组的末尾,同时保持非零元素的相对顺序。
请注意 ,必须在不复制数组的情况下原地对数组进行操作。
输入共两行。
第一行为两个个整数n,代表数组nums的长度。
第二行为n个整数nums0,nums1,...,numsn−1,数字之间以空格分隔。
输出操作后的数组,以空格分隔。
输入
5
0 1 0 3 12
输出
1 3 12 0 0
输入
1
0
输出
0
你能尽量减少完成的操作次数吗?