283.移动零:数组两次遍历

110 阅读1分钟

这是我参与2022首次更文挑战的第8天,活动详情查看:2022首次更文挑战

一、题目

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

请注意 ,必须在不复制数组的情况下原地对数组进行操作。

示例 1:

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

示例 2:

输入: nums = [0]
输出: [0]

提示:

1 <= nums.length <= 104
-231 <= nums[i] <= 231 - 1

进阶:你能尽量减少完成的操作次数吗?

来源:力扣(LeetCode) 链接:leetcode-cn.com/problems/mo…

二、分析解题思路

思路一 两次遍历

第一次遍历数组,记录不等于将不等于0的数,往前移动,定义一个下标j=0,将遍历的非0的数赋值给nums[j]后,j++,遍历结束后j之后的数都是0。

三、JS代码

3.1

 var moveZeroes = function(nums) {
     let j=0;
    for(let i=0;i<nums.length;i++){
        if(nums[i]!== 0){
            nums[j] = nums[i];
            j++;
        }
    }
    for(let i=j;i<nums.length;i++){
        nums[i]=0;
    }
    return nums
};

复杂度:时间复杂度O(n),空间复杂度O(1)

四、总结

复杂度:时间复杂度O(n),空间复杂度O(1)