题目描述
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
示例:
输入: [0,1,0,3,12]
输出: [1,3,12,0,0]
说明:
- 必须在原数组上操作,不能拷贝额外的数组。
- 尽量减少操作次数。
解题思路:交换位置
本题我们还可以通过双指针交换元素方法解题。
定义指针 l 指向 0,r 指向 非0 元素。
当 l 指向值为 0 的元素,r 指向值为 非0 的元素的时候,判断 l<r && r<len,如果条件成立,则此时找到了一组 0 前 非0 后 的情况,交换两个元素位置。
l 和 r 继续向后查找,直到处理完输入数组,就完成了移动所有 0 到数组末尾的操作。
代码实现
var moveZeroes = function(nums) {
let index = 0;
// 快指针
for(let i = 0; i < nums.length; i++){
if(nums[i] != 0){
nums[index] = nums[i]
index++
}
}
// 慢指针
for(let i = index; i< nums.length; i++){
nums[i] = 0;
}
return nums;
};
至此我们就完成了leetcode-283-移动零