283. Move Zeroes

Javascript

/**
 * @param {number[]} nums
 * @return {void} Do not return anything, modify nums in-place instead.
 */
var moveZeroes = function(nums) {
    var count=0;
    for(var i=0;i<nums.length;i++)
    {
        if(nums[i]===0)
        {
        nums.splice(i,1);
        count++;
        i--;
        }
    }
    for(var j=0;j<count;j++)
    {
        nums.push(0);
    }
};

C++和Java的方法没想出来

最优解

思路和我的思路类似,但是它这里条件判断选择的更好,用不等于0做判断,那么可以把后面的数移到前面去,最后再把0补上即可。我想的是记录0的个数,而它记录了非0个数,和数组长度一比也可以算出0的个数,而且这个变量还可以用于数组移位,很巧妙。

C++

class Solution {
public:
    void moveZeroes(vector<int>& nums) {
        int count=0;
        for(int i=0;i<nums.size();i++)
        {
            if(nums[i]!=0) nums[count++]=nums[i];
        }
        for(;count<nums.size();count++)
        {
            nums[count]=0;
        }
    }
};

Java

public class Solution {
    public void moveZeroes(int[] nums) {
    if (nums == null || nums.length == 0) return;        

    int insertPos = 0;
    for (int num: nums) {
        if (num != 0) nums[insertPos++] = num;
    }        

    while (insertPos < nums.length) {
        nums[insertPos++] = 0;
    }
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,776评论 0 33
  • 题目: Given an array nums, write a function to move all 0's...
    Cloudox_阅读 135评论 0 0
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,523评论 25 708
  • 陈安东 一级标题 写下我的markdown 操作命令(菜单) 二级标题 三级标题 四级 五级 六级 无序列表![...
    撒哈拉土狼阅读 235评论 0 0
  • 业务员带着客户串通工厂—怎么听,都不相信这是真的。 这到底是个励志业务员的奋斗发家史还是一个呆萌贸易商的觉悟成长路...
    壹声阅读 188评论 0 0