问题:
给定一个数组 nums
,编写一个函数将所有 0
移动到数组的末尾,同时保持非零元素的相对顺序。
输入:[0,1,0,3,12]
输出:[1,3,12,0,0]
算法:
其实,数组移动的问题,几乎是大同小异。我们的核心问题是知道每个元素到底要移动到哪里。我的思路如下图所示:
当循环完成后,在把后面cnt个元素赋值为0即可。
实现:
class Solution {
public void moveZeroes(int[] nums) {
int len = nums.length,cnt = 0;
for(int i = 0; i<nums.length;i++){
if(nums[i] == 0)
cnt++;
else{
nums[i-cnt] = nums[i];
}
}
for(int i = 0;i<cnt;i++){
nums[len-1-i] = 0;
}
}
}