Move Zeroes ——LeenCode

Java实现Move Zeroes ,题目如下:



时间复杂度(N^2):解题思想首先遍历数组,若数组中存在0,记录0的个数的变量count自加一,且0以后的数据依次上移一位,数组长度减1;遍历数组后,根据记录的0的个数,依次从数组末尾赋值0;

public class Solution {
    public void moveZeroes(int[] nums) {
        
        int count=0;
        int length=nums.length;
        for(int i=0;i<length;i++)
        {
            if(nums[i]==0)
            {
                for(int j=i;j<length-1;j++)
                {
                    nums[j]=nums[j+1];    //遍历0后,将其以后的数进行搬移
                   
                }
                    count++;     //取得零的个数
                    length--;    //0以后的数据上移一位,数组长度减1
                    i=i-1;        //数组向上移位后i应重新查看是否为0
            }
            
        }
        for(int i=1;i<count+1;i++)//根据0的个数对数组最后几位置零
        {
            nums[nums.length-i]=0;
        }
    }
    

}

 注意:注释部分,取得数组中的0的个数,数组元素为0则count++(count++;   ),数组0以后的数据上移一位后,数组长度length应减一( length--; ),且数组遍历需从原处开始( i=i-1;   );

时间复杂度(N):此算法比算法一时间复杂度有所提高,首先遍历数组,保存非零的数据至数组遍历位置的前方,遍历整个数组后,对数组余下为赋值的位置赋0;

public class Solution {
    public void moveZeroes(int[] nums) {
       
        
        int newlen=0;
        int length=nums.length;
        for(int i=0;i<length;i++)
        {
            if(nums[i]!=0)
            {
              nums[newlen++]=nums[i];    //遍历非0的数即保存
            }
        }
        for(;newlen<length;newlen++)//对于数组未填满的数赋0
        {
            nums[newlen]=0;
        }
    }
    

注意:此算法关键在于 nums[newlen++]=nums[i];   ,利用数组本身自复制;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值