题目链接
题目描述
注意点
- 将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序
- 必须在不复制数组的情况下原地对数组进行操作
解答思路
- 采用双指针的思路,左指针指向已移动零的数组的尾部,右指针指向为移动零的数组的头部,当右指针指向了一个非零元素,则需要将左右指针对应的元素进行交换,将0移动到后方
代码
java
class Solution {
public void moveZeroes(int[] nums) {
int leftZero = 0;
for (int i = 0; i < nums.length; i++) {
if (nums[i] != 0) {
swap(nums, leftZero, i);
leftZero++;
}
}
}
public void swap(int[] nums, int left, int right) {
int tmp = nums[left];
nums[left] = nums[right];
nums[right] = tmp;
}
}
关键点
- 双指针的思想