zoukankan      html  css  js  c++  java
  • [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:

    /*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:

    /*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;
    };

     C++:

    /*C++*/
    class Solution {
    public:
        void moveZeroes(vector<int>& nums) {
            if(nums.size()<=1)return;
            int zero_start=-1,
                len=nums.size();
            
            for(int i=0;i<len;++i){
                if(nums[i]==0 && zero_start==-1){
                    zero_start=i;
                }
                if(nums[i]!=0 && zero_start!=-1){
                    nums[zero_start]=nums[i];
                    nums[i]=0;
                    zero_start++;
                }
            }
        }
    };
    
    /**代码优化下*/
    class Solution {
    public:
        void moveZeroes(vector<int>& nums) {
            if(nums.size()<=1)return;
            for(int i=0,j=0;i<nums.size();++i){
                if(nums[i]){
                    swap(nums[i],nums[j++]);
                }
            }
        }
    };

     Python:

    #Python3
    class Solution:
        def moveZeroes(self, nums: List[int]) -> None:
            """
            Do not return anything, modify nums in-place instead.
            """
            j=0;
            for i in range(len(nums)):
                if(nums[i]):
                    nums[i],nums[j]=nums[j],nums[i]
                    j=j+1
  • 相关阅读:
    安装scrapy解决Microsoft Visual C++ 14.0 is required...
    django一对多模型以及如何在前端实现
    django实现分页功能
    django实现搜索功能
    pycharm里生成requirements.txt
    ubuntu中pwntools安装
    获取一个图片的颜色html代码
    对class文件进行反编译
    Django项目将debug模式设置为false时,静态文件出错
    Django中在xadmin中集成DjangoUeditor
  • 原文地址:https://www.cnblogs.com/cff2121/p/14005039.html
Copyright © 2011-2022 走看看