题目介绍

题解
使用双指针,左指针指向当前已经处理好的序列的尾部,右指针指向待处理序列的头部。
右指针不断向右移动,每次右指针指向非零数,则将左右指针对应的数交换,同时左指针右移。
注意到以下性质:
- 左指针左边均为非零数;
- 左指针到右指针之间均为零。
因此每次交换,都是将左指针的零与右指针的非零数交换,且非零数的相对顺序并未改变。
代码如下:
class Solution {
public void moveZeroes(int[] nums) {
int l = 0;
for (int r = 0; r < nums.length; r++) {
if (nums[r] != 0) {
// 交换 nums[r] 和 nums[l]
int tmp = nums[r];
nums[r] = nums[l];
nums[l] = tmp;
l++;
}
}
}
}
247

被折叠的 条评论
为什么被折叠?



