算法题打卡(006)-菜鸟进化-移动数组的零

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

示例:

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/move-zeroes
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

一开始我是这么做的

var moveZeroes = function(nums) {
     for(let i=0;i<nums.length;i++){
         if(!nums[i]){
             nums.splice(i,1);
             nums.push(0);
         }
     }
}

 结果通过了20%的测试用例,绞尽脑汁分析了一下(因为太笨了,没有一分钟根本反应不过来),是因为每次判断完,i都会++,这就会导致这个if循环是隔一个判断一个,离谱。接着我又在for循环里加了一句:

i--

发现运行时间超了,是的,如果加了i--,i还没来得及做++,就被减成了负数,还判断个锤子啊喂!在if外加一句i--也是一样的道理,那咋办呢?

既然可能会减成负数,那为什么不让i成为最大值呢?让负数成为循环的出口,于是~~

var moveZeroes = function(nums) {
    var i = nums.length-1;
    while(nums[i]!=undefined){
        if(!nums[i]){
            nums.splice(i,1);
            nums.push(0);
        }
        i--;
    }
};

奈斯!成功!yeah! 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值