思路
使用双指针,左指针i指向当前已经处理好的序列的尾部,右指针j指向待处理序列的头部。
右指针j不断向右移动,每次右指针j指向非零数,则将左右指针对应的数交换,同时左指针右移。
这是官方思路,总结的非常到位,但是理解起来非常抽象。没有关系,我们先过一遍代码,针对代码思考这个解法的巧妙之处。
#code-switcher
P4003.移动零
Leetcode 283.移动零
题目描述
给定一个长度为 n 的整数数组 nums,请将数组中的所有 0 移动到数组的末尾,同时保持非零元素的相对顺序不变。
请注意,要求在不复制数组的情况下,原地对数组进行操作。
输入描述
第一行输入一个整数 n,表示数组 nums 的长度。
第二行输入 n 个整数,表示数组 nums 中的元素。
输出描述
输出 n 个整数,表示将所有 0 移动到末尾后的数组。
相邻两个整数之间用一个空格隔开。
样例 1
输入
5
0 1 0 3 12
输出
1 3 12 0 0
样例 2
输入
1
0
输出
0
数据范围
1<=n<=104
−231<=nums[i]<=231−1