[路飞]_leetcode-283-移动零

131 阅读1分钟

题目描述

[题目地址]

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。

示例:

输入: [0,1,0,3,12]
输出: [1,3,12,0,0]

说明:

  1. 必须在原数组上操作,不能拷贝额外的数组。
  2. 尽量减少操作次数。

解题思路:交换位置

本题我们还可以通过双指针交换元素方法解题。
定义指针 l 指向 0r 指向 非0 元素。
l 指向值为 0 的元素,r 指向值为 非0 的元素的时候,判断 l<r && r<len,如果条件成立,则此时找到了一组 0 前 非0 后 的情况,交换两个元素位置。
lr 继续向后查找,直到处理完输入数组,就完成了移动所有 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-移动零