283. 移动零


283.移动零

一、题目

给定一个数组nums,编写一个函数将所有0移动到数组的末尾,同时保持非零元素的相对顺序。

示例

输入: [0,1,0,3,12]
输出: [1,3,12,0,0]

说明

  • 必须在原数组上操作,不能拷贝额外的数组。
  • 尽量减少操作次数。

二、相关链接

三、解题思路

  • 解法:双指针
  • 思路:用两个指针,一个遍历数组,一个指向第一个0下标(用于交换数)
  • 步骤
    • 1.定义移动指针i=0,指向第一个0的下标j=0
    • 2.i从0遍历到nums末尾,当nums[i]不为0时,与nums[j](第一个0)交换,同时j右移

四、代码

class Solution {
  public void moveZeroes(int[] nums) {
    //指向第一个0的下标
    int j = 0;

    //游动指针从头到尾
    for (int i = 0;i<nums.length;i++) {
      //如果当前数为0,就i+1,j不变
      if(nums[i] != 0) {
        //调换i和j位置的数
        int temp = nums[i];
        nums[i] = nums[j];
        nums[j] = temp;

        //j+1(第一个0的下标)
        j+=1;
      }
    }
  }
}

五、总结

  • 难度:中等(没有这个思路/思维,需要重做)

文章作者: GaryLee
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 GaryLee !
  目录