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