LeetCode 283 移动零

LeetCode 283 移动零

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

双指针

执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户
内存消耗:39 MB, 在所有 Java 提交中击败了79.88%的用户

class Solution {
    public void moveZeroes(int[] nums) {
        if(nums==null || nums.length<=1) {
            return;
        }
        //双指针
        int p1 = 0, p2 = 0, tmp = 0;
        //找到第一个0元素
        while(p1<nums.length && nums[p1]!=0) {
            p1++;
        }
        p2 = p1;
        while(p2 < nums.length) {
            //找到第一个0后的第一个非0元素
            while(p2<nums.length && nums[p2]==0) {
                p2++;
            }
            if(p2==nums.length) {
                break;
            }
            //交换
            tmp = nums[p2];
            nums[p2] = nums[p1];
            nums[p1] = tmp;
            p1++;
            p2++;
        }

        return;
    }
}
posted @ 2020-09-21 09:35  CodeSPA  阅读(103)  评论(0编辑  收藏  举报