力扣 283.移动零 (双指针)
文章目录
- 题目介绍
- 题解
题目介绍
题解
使用双指针,左指针指向当前已经处理好的序列的尾部,右指针指向待处理序列的头部。
右指针不断向右移动,每次右指针指向非零数,则将左右指针对应的数交换,同时左指针右移。
注意到以下性质:
- 左指针左边均为非零数;
- 左指针到右指针之间均为零。
因此每次交换,都是将左指针的零与右指针的非零数交换,且非零数的相对顺序并未改变。
代码如下:
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++;}}}
}