Leetcode题目-283-moveZeroes

Leetcode题目-283-moveZeroes

题目:

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

示例:

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

说明:

必须在原数组上操作,不能拷贝额外的数组。
尽量减少操作次数。

答题解析

思路:

1.遍历一维数组,判断该位数是否为零。
2.移动非零数字。

代码1

    public void moveZeroes(int[] nums) {
        #定义数组的长度len
        int len = nums.length;
        #记录下一个填入的非零元素的位置
        int next = 0;
        #判例,当数组长度为1,直接输出数组。
        if (len < 2) {
            return;
        }
    #遍历数组
        for (int i = 0; i < len; i++) {
        #判断是否非零
            if (nums[i] != 0) {
            #如果是非零,将其填入下一个非零元素,指针为next
                nums[next] = nums[i];
                #指针next自加
                next++;
            }
        }
    #将剩余的位置填上零
        for (int i = next; i < len; i++) {
            nums[i] = 0;
        }
    }
}

代码2

class solution{
    public void moveZeroes(int[] nums){
        #记录下一个填入的非零元素的位置
        int next = 0;
        #遍历数组
        for(int i =0 ;i<nums.length;i++){
        #判断遍历到的num[i]是否非零
            if(nums[i] != 0 ){
            #如果是,将其记录,指针为next
                nums[next] = nums[i];
                #判断i是否与next相同
                if(i != next){
                #如果是,将遍历到的位赋为0
                    nums[i] = 0;
                
                }
                #next指针自增
                next++;
            }
        }
    }
}

复杂度

时间复杂度位O(n)
空间复杂度位O(n)

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容