题目
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
示例:
输入: [0,1,0,3,12]
输出: [1,3,12,0,0]
说明:
必须在原数组上操作,不能拷贝额外的数组。 尽量减少操作次数。
思路
- 双指针:设两个索引分别为i=0和j=0,i用来遍历nums数组,j是数组中最后一个不为0的索引。
- 遍历元素不为0时,i与j同时向前指一位;为0时,j不变,继续向前遍历。
- 当再遇到不为0的元素时,j如果小于i,说明前面遍历的元素里有0,此时要把这个不为0的元素和前面第一个为0的元素(索引为j)置换;当再遇到的元素为0时,j不变,仍然指向前面第一个为0的元素
代码
var moveZeroes = function(nums) {
let j = 0;
for(let i = 0;i<nums.length;i++){
if(nums[i]!==0){
if(j<i){
nums[j]=nums[i]
nums[i] = 0
}
j++
}
}
return nums
};
执行结果
