给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
示例
输入: [0,1,0,3,12]
输出: [1,3,12,0,0]
说明
必须在原数组上操作,不能拷贝额外的数组。
尽量减少操作次数。
首先循环这个数组,将数组中所有不是0的数字,拿出来放到数组前面
let k = 0;
for (let i = 0; i < nums.length; i++) {
if (nums[i] !== 0) {
nums[k++] = nums[i];
}
}
因为要保持原数组非零元素的相对顺序,所以每当遇到一个不为0的变量都要进行复制!
最后遍历结束,那么会有K个不为0的变量,随后的nums.length-K的长度都是0
下面是详细代码
var moveZeroes = function(nums) {
let k = 0;
for (let i = 0; i < nums.length; i++) {
if (nums[i] !== 0) {
nums[k++] = nums[i];
}
}
for (let j = k; j < nums.length; j++) {
nums[j] = 0;
}
return nums
};