[LeetCode]283. Move Zeroes

283. Move Zeroes Easy

Given an array nums, write a function to move all 0's to the end of it while maintaining the relative order of the non-zero elements.

Example:

Input: [0,1,0,3,12]
Output: [1,3,12,0,0]

Note:

  1. You must do this in-place without making a copy of the array.
  2. Minimize the total number of operations.

题目大意:给定一个数组,在不改变数组中数字排序的情况下,将数组中所有的0都移动到数组的尾部

注意:1.不能使用新的数组  2.尽可能少的对数组进行修改

 

思路:

方法一:

遍历数组,记录数组中0的个数,并将数组中的0删除掉,最后在数组尾部插入相应数量的0.这么做的缺点是,对于有的语言,没有对数组操作的函数的话,很难实现,并且时间复杂度较高。

代码如下:

/*JavaScript*/
var moveZeroes = function(nums) {
    let zero_num=0;
    for(let i=0;i<nums.length;++i){
        if(nums[i]===0){
            zero_num++;
            nums.splice(i,1);
            i--;
        }
    }
    while(zero_num--){
        nums.push(0);
    }
    return nums;
};

 

方法二:

维护一个游标zero_start,指示数组中0开始的地方,遍历数组,遇到非0数组就将那个数字放到zero_start指示的地方,然后将zero_start向前移动1.

增加边界判断,数组大小为小于等于1,就直接返回数组本身。

代码如下:

/*JavaScript*/
var moveZeroes = function(nums) {
    if(nums.length<=1)return nums;
    
    let zero_start=-1;
    for(let i=0;i<nums.length;++i){
        if(nums[i]==0 && zero_start==-1){
            zero_start=i;
        }
        else if(nums[i]!=0 && zero_start!=-1){
            nums[zero_start]=nums[i];
            nums[i]=0;
            zero_start++;
        }
    }
    return nums;
};

 

上一篇:LeetCode 172. 阶乘后的零 Factorial Trailing Zeroes


下一篇:Codeforces 1260 B.Obtain Two Zeroes