移动零

186 阅读1分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

移动零

方法一:双指针

指定两个指针,左指针和右指针。右指针向右移动,每次遇到非零的元素时,与左指针交换元素,同时左指针向右移动一位。

这样的结构有如下两种性质:

  1. 左指针左边均是非零的数字
  2. 右指针左边知道左指针都是零
class Solution {
    public void moveZeroes(int[] nums) {
        //创建两个指针
        int left = 0;
        int right = 0;
        int length = nums.length;
        while (right < length) {
            if (nums[right] != 0) {
                //交换左右指针元素
                swap(right, left, nums);
                left++;
            }
            right++;
        }
    }
     private  void swap(int right, int left, int[] nums) {
        int temp = nums[right];
        nums[right] = nums[left];
        nums[left] = temp;
    }
}

类似的方法:

class Solution {
    public void moveZeroes(int[] nums) {
  //1.创建一个指针,这个指针左侧都是非0的元素,右侧到index的之间为0
        int j = 0;
        for (int i = 0; i < nums.length; i++) {
            if (nums[i] != 0) {
                nums[j] = nums[i];
                if (i != j) {
                    nums[i] = 0;
                }
                j++;
            }
        }
    }
}

\