描述

给定一个数组nums,写一个函数,将数组中所有的0挪到数组的末尾,维持其他所有非0元素的相对位置。 举例: nums = [0, 1, 0, 3, 12],

 函数运行后结果为[1, 3, 12, 0, 0]

解析

快慢指针,慢指针指向第一个0,快指针指向第一个非0.

代码

public static void main(String[] args) {
        int[] n = {4,2,4,0,0,3,0,5,1,0};
        moveZero(n);
        System.out.println(JSON.toJSONString(n));
    }

    public static void moveZero(int[] n) {
        if (n == null || n.length < 2) {
            return;
        }
        int slow = 0;
        int fast = 1;
        while (fast < n.length && slow < n.length) {
            if (n[slow] == 0 && n[fast] != 0) {
                swap(n, slow++, fast++);
            } else if (n[slow] == 0 && n[fast] == 0) {
                fast++;
            } else {
                slow++;
                fast++;
            }
        }
    }

    public static void swap(int[] n, int a, int b) {
        if (a == b) {
            return;
        }
        n[a] = n[a] ^ n[b];
        n[b] = n[a] ^ n[b];
        n[a] = n[a] ^ n[b];
    }

 

posted on 2019-06-28 16:55  反光的小鱼儿  阅读(136)  评论(0编辑  收藏  举报