题目传送门
这道题可以归类为 数组划分/数组分块 。
题目制定了一个规则,我们可以在这个规则下,将数组划分为若干个区间。
这道题让我们把所有非零元素移动到左边。所有零元素移动到右边。
将数组划分为:
左区间非0;
右区间:全0
解决这类我们使用双指针算法。
class Solution {
public void moveZeroes(int[] nums) {
//定义left和right双指针。并在right<n的情况下循环。
//如果nums[right] != 0则交换left和right指向的元素。
//若等于零则right++。
//保证left之前的数据非零。left指向第一个零。
//right之后的数据待处理。
int left = 0,right = 0;
int n = nums.length;
while(right < n){
if(nums[right] != 0){
int temp = nums[left];
nums[left] = nums[right];
nums[right] = temp;
left++;
}
right++;
}
}
}