LeetCode283 移动零

题目内容

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
示例:
输入: [0,1,0,3,12]
输出: [1,3,12,0,0]

题目解析,思路及解法

根据题目,我们可以使用双指针的方式如下:

  • 左指针left指向已经处理好序列的尾部,右指针right指向未处理序列的头部。
  • 右指针不断的向右移动,遇到非0的元素,就和左指针所指向的元素进行值交换,同时左指针右移。
注意以下性质:
1、左指针左边所对应的数均为非0数。
2、右指针的左边向左一直到左指针对应的数都为0。
因此每次交换,都是当右指针发现了非0的数,和左指针对应的0进行交换。

代码实现

class Solution {
   public void moveZeroes(int[] nums) {
        if(nums==null) {
            return;
        }
       int len = nums.length;
       int left = 0,right = 0;
       while(right < len) {
           if(nums[right] != 0) {
               swap(nums,left,right);
               left++;
           }
           right++;
     }
   }
    private void swap(int[] nums,int left, int right) {
        int swap = nums[left];
        nums[left] = nums[right];
        nums[right] = swap;
    }
}
上一篇:384. 打乱数组(重置、随机)(Medium)


下一篇:2021-09-13