阅读 18

每天一道力扣题: 283. 移动零

每天一道力扣题: 283. 移动零

题目

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

示例:

输入: [0,1,0,3,12]
输出: [1,3,12,0,0]
复制代码

说明:

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

思路

双指针两次遍历

1-1.gif

/**
 * @param {number[]} nums
 * @return {void} Do not return anything, modify nums in-place instead.
 */
var moveZeroes = function(nums) {
    if (!nums.length) return nums
    // 1. 遍历,非0元素往前移动
    let j = 0 // 记住非0元素的最后索引
    for (i = 0; i < nums.length; i++) {
        if (nums[i]) {
            nums[j++] = nums[i] // 统计非0元素
        }
    }
    // 2. 遍历,为0的元素移动到数组末尾
    for (let i = j; i < nums.length; i++) {
        nums[i] = 0
    }
    return nums
};
复制代码

时间复杂度

。 空间复杂度

双指针一次遍历

2-2.gif

/**
 * @param {number[]} nums
 * @return {void} Do not return anything, modify nums in-place instead.
 */
var moveZeroes = function(nums) {
    if (!nums.length) return nums
    // 一次遍历其实就是在区分0与非0时候,直接就交换了
    let j = 0 // 记住非0元素的索引
    for (i = 0; i < nums.length; i++) {
        if (nums[i]) {
            // 交换0与非0
            let temp = nums[i]
            nums[i] = nums[j]
            nums[j++] = temp
        }
    }
    return nums
};
复制代码

时间复杂度

。 空间复杂度

广告位

觉得有意思点个右下角在看,或者直接关注。

扫码_搜索联合传播样式-白色版.png

关注下面的标签,发现更多相似文章
评论