leetcode刷题12.移动零——Java版

Posted 一条IT

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode刷题12.移动零——Java版相关的知识,希望对你有一定的参考价值。

⭐欢迎订阅《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)

End

更多算法题欢迎关注专栏《leetcode》
领取学习资料请看左侧【关于作者】

以上是关于leetcode刷题12.移动零——Java版的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode刷题100天—283. 移动零(双指针)—day20

Leetcode刷题100天—283. 移动零(双指针)—day20

LeetCode刷题283-简单-移动零

LeetCode刷题283-简单-移动零

leetcode 283. 移动零

刷题 | 数组移动元素