题目
给一个数组 nums 写一个函数将 0
移动到数组的最后面,非零元素保持原数组的顺序
注意事项
1.必须在原数组上操作
2.最小化操作数
样例
给出 nums = [0, 1, 0, 3, 12]
, 调用函数之后, nums = [1, 3, 12, 0, 0]
.
解题
快速排序思想,以0为界划分
public class Solution { /** * @param nums an integer array * @return nothing, do this in-place */ public void moveZeroes(int[] nums) { // Write your code here int slow = -1; int fast = 0; int n = nums.length; int x = 0; while(slow < fast && fast < n){ if(nums[fast]!=x){ slow++; swap(nums,slow,fast); } fast++; } } public void swap(int[] A,int i,int j){ int tmp = A[i]; A[i] = A[j]; A[j] = tmp; } }
稍作更新
public class Solution { /** * @param nums an integer array * @return nothing, do this in-place */ public void moveZeroes(int[] nums) { // Write your code here int one = 0; int fast = 0; int n = nums.length; int x = 0; for(int i=0;i<n;i++){ if(nums[i]!=x) { // 不为0 的向前移动 nums[one] = nums[i]; one++; } } for(int i= one;i<n;i++) // 后面的就是0 nums[i] = x; } }