当前位置 博文首页 > 一条IT:【leetcode刷题】12.移动零——Java版

    一条IT:【leetcode刷题】12.移动零——Java版

    作者:[db:作者] 时间:2021-08-03 12:46

    ?欢迎订阅《leetcode》专栏,每日一题,每天进步?

    本题所使用的指针技巧,其实就是快速排序中序列按pivot元素分成两个分组并找到pivot元素位置的操作的基础

    ——leetcode此题热评

    前言

    哈喽,大家好,我是一条。

    糊涂算法,难得糊涂

    Question

    283. 移动零

    难度:简单

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

    示例:

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

    说明:

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

    Solution

    类似之前的有序数组合并

    依然采用双指针

    • 定义两个指针,一个指向零,一个指向非零。
    • 指向非零的指针先移动
    • 如果当前元素不等于零,和零指针交换值,并且零指针前进一

    同样的27.移除元素,大家可以练习一下

    Code

    所有leetcode代码已同步至github

    欢迎star

    /**
     * @author yitiaoIT
     */
    class Solution {
        public void moveZeroes(int[] nums) {
            int notZero=0;
            int zero=0;
            while(notZero<nums.length){
                if (nums[notZero]!=0){
                    int tmp;
                    tmp=nums[notZero];
                    nums[notZero]=nums[zero];
                    nums[zero]=tmp;
                    zero++;
                }
                notZero++;
            }
        }
    }
    

    Result

    复杂度分析

    • 时间复杂度:O(N)

    🌈寻宝

    ?今天是坚持刷题更文的第12/100天

    ?各位的点赞、关注、收藏、评论、订阅就是一条创作的最大动力

    ?更多算法题欢迎关注专栏《leetcode》

    为了回馈各位粉丝,礼尚往来,给大家准备了一条多年积累下来的优质资源,包括 学习视频、面试资料、珍藏电子书等

    怎么领取请大家自己找,寻宝游戏现在开始。

    找不到可以评论留言,一条就会注意到你。

    如果还不行,请私信我。
    在这里插入图片描述

    cs