题目地址:283. Move Zeroes
解题思路:毫无疑问,这道题依然使用双指针法
,但是我一开始做还是没什么思路,只考虑到把非0的元素放置到数组左边,在看了一些大佬的题解后,发现这种方法最为巧妙。其根本思想就是参考快速排序的思想,以0
为界限,将整个数组划分为两个区域,左边为非0元素
,右边为0
。i
负责遍历整个数组,j
负责标记加入的非零元素
的位置。
class Solution {
public void moveZeroes(int[] nums) {
if (nums == null || nums.length == 0) {
return;
}
int j = 0;
for (int i = 0; i < nums.length; i++) {
if (nums[i] != 0) {
int temp = nums[i];
nums[i] = nums[j];
nums[j++] = temp;
}
}
}
}