给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
示例:
输入: [0,1,0,3,12]
输出: [1,3,12,0,0]
说明:
必须在原数组上操作,不能拷贝额外的数组。
尽量减少操作次数。
本题比较简单,可以用双指针,一个指针指向0,一个指向其他数,指向0的数一直向后遍历,当遇见0就另设一指针向后移动,如果遇见了不是0的数就进行交换即可。
这是通解
而不是通解就是我们可以把所有不是0的数都向前移动。占掉原本0的位置,然后记录不是0的数。
再用一个循环把后面的数全置为0即可。
代码如下:
- 我用的是通解
class Solution {
public void moveZeroes(int[] nums) {
int pointToZero = 0,pointToOther = 0;
while (pointToZero < nums.length){
if (nums[pointToZero] != 0){
pointToZero ++;
}
else{
pointToOther = pointToZero + 1;
while (pointToOther < nums.length && nums[pointToOther] == 0) pointToOther++;
if (pointToOther == nums.length) break;
int temp = nums[pointToOther];
nums[pointToOther] = 0;
nums[pointToZero] = temp;
pointToZero ++;
}
}
}
}
网友评论