2
0
0
力扣hot4-移动零

文章摘要
|

这个题是个经典双指针题,一般做法是快指针遍历数组找非零值;慢指针标记非零区域的边界,负责存放找到的非零数字。然后引入中间值交换快慢指针。总之就是不要盯着零,而是盯着非零的数,去把他收集起来。
但是我们想想,如果我们拿到了所有非零值,那是不是数组后面的一定是零?所以其实我们之间从慢指针遍历把后续全部修改为零即可,省去了引入新变量。
class Solution {
public void moveZeroes(int[] nums) {
int s = 0;
for(int i = 0; i < nums.length; i++){
if(nums[i] != 0){
nums[s++] = nums[i]
}
}
for(s; s < nums.length; s++){
nums[s] = 0;
}
}
}