题目传送门
这道题可以归类为 数组划分/数组分块 。
题目制定了一个规则,我们可以在这个规则下,将数组划分为若干个区间。
这道题让我们把所有非零元素移动到左边。所有零元素移动到右边。
将数组划分为:
左区间非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++;}}
}