描述
给定一个数组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]; }