解题思路


这题主要考察的是对题目的理解,使用双指针,什么时候交换?

  • 当数字不为0时,进行交换

通过把不为0的数字移到左边,就可以实现题目效果,图解如下:

image-zpwgefsc.png

实现代码


class Solution {
    public void moveZeroes(int[] nums) {
        int n = nums.length, left = 0, right = 0;
        while (right < n) {
            if (nums[right] != 0) {
                swap(nums, left, right);
                left++;
            }
            right++;
        }
    }

    public void swap(int[] nums, int left, int right) {
        int temp = nums[left];
        nums[left] = nums[right];
        nums[right] = temp;
    }
}

复杂度分析


  • 时间复杂度:O(N)
  • 空间复杂度:O(1)