使用双指针,左指针i指向当前已经处理好的序列的尾部,右指针j指向待处理序列的头部。
右指针j不断向右移动,每次右指针j指向非零数,则将左右指针对应的数交换,同时左指针右移。
这是官方思路,总结的非常到位,但是理解起来非常抽象。没有关系,我们先过一遍代码,针对代码思考这个解法的巧妙之处。
#code-switcher
给定一个长度为 n 的整数数组 nums。你需要重新调整数组内部的元素排列,使得所有数值为 0 的元素都被放到数组的末尾,同时保持所有非零元素原有的前后顺序不变。
这一调整过程必须直接作用在给定的数组 nums 上,不允许借助额外复制出来的数组。
约束条件
第一行输入一个整数 n,表示数组 nums 的长度。
第二行输入 n 个整数,依次表示数组 nums 中的元素。
输出一行,包含 n 个整数,表示将所有 0 移动到末尾后的数组。
相邻两个整数之间用一个空格隔开。
输入
5
0 1 0 3 12
输出
1 3 12 0 0
说明
非零元素为 1、3、12,它们的相对顺序保持不变。
将全部 2 个 0 移动到数组末尾后,数组为 1、3、12、0、0。
输入
6
-1 0 2 0 0 -3
输出
-1 2 -3 0 0 0
说明
非零元素为 -1、2、-3,它们的相对顺序保持不变。
将 3 个 0 放在数组末尾后,数组为 -1、2、-3、0、0、0。
输入
1
0
输出
0
说明
数组长度为 1,唯一元素就是 0。
该元素已经位于末尾,因此输出仍为 0。
输入
4
5 -2 8 1
输出
5 -2 8 1
说明
数组中没有 0。
所有非零元素保持原顺序不变,因此输出为 5、-2、8、1。
© CodeFun2000 · 使用条款
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册