LintCode539:移动的零

给一个数组 nums 写一个函数将 0 移动到数组的最后面,非零元素保持原数组的顺序

 注意事项

1.必须在原数组上操作
2.最小化操作数
样例
给出 nums = [0, 1, 0, 3, 12], 调用函数之后, nums = [1, 3, 12, 0, 0].

第一次尝试代码如下

public void moveZeroes(int[] nums) {
        // Write your code here
        int len = nums.length;
        for(int i=0;i<len;i++){
            if(nums[i]==0){
                for(int j=i;j<len-1;i++){
                    nums[j]=nums[j+1];
                }
                nums[len-1]=0;
            }
        }
    }

结果爆出超时。。。。。。。。。。
可能用的方法太low了。所以改变策略。
修改后的代码如下

 public void moveZeroes(int[] nums) {
        // Write your code here
        int len = nums.length;
        int a=0;
        for(int i=0;i<len;i++){
            if(nums[i]!=0){
                nums[a]=nums[i];
                a++;
            }
        }
        for(int i=a;i<len;i++){
            nums[i]=0;
        }
    }

这里的思路和第一次的思路不一样。第一次的思路是遇到零之后的所有数组元素都向前移动然后末位补零。这次是不为零的向前移动然后计数。最后统一补零。这样的算法复杂度就降低了不少。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值