题目简述
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
示例:
- 输入: [0,1,0,3,12]
- 输出: [1,3,12,0,0]
简单
双指针
/**
* @param {number[]} nums
* @return {void} Do not return anything, modify nums in-place instead.
*/
var moveZeroes = function(nums) {
let len = nums.length
for (let i = 0; i < len; i ++) {
if (nums[i] === 0) {
nums.splice(i, 1)
nums.push(0)
i --
len --
}
}
};
- 问题分析
- 从头到尾遍历整个数组,当前位置为
i
,len = nums.length
,遍历的进行条件为i < len
。 - 当找到一个元素为
0
时,通过splice
方法删除该元素,在末尾增加0
。此时整个数组发生了位移,当前的位置被删除,变为了原本的下一个元素,所以我们这里要i --
,以满足下一个元素为原本的元素。除此之外,还需要将len --
,否则最终会遍历到移动到最后的0
。
- 从头到尾遍历整个数组,当前位置为