移动0

移动0

题目

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

请注意 ,必须在不复制数组的情况下原地对数组进行操作。

示例

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

思路

  • 使用快慢指针,快指针指向遍历的新元素,慢指针指向已经处理好的(没有0)的下一位
  • 当快指针指的元素不为0时,就去比较与慢指针指向的是不是一个元素,
    • 如果是一个元素,就不需要更改,快慢指针同时向前一步
    • 如果不是一个元素,就要进行处理了,将快指针指向的元素赋值到慢指针指向的位置,同时将快指针指向的位置赋0(这样遍历一遍后就不需要再处理了),然后将慢指针和快指针都向前一步
  • 如果快指针指向的元素为0,那么就遍历下一个元素,快指针加一即可

代码

public void moveZeroes(int[] nums)  {
    int i = 0, j =0;
    while (j < nums.length) {
        if (nums[j] != 0) {
            if (i < j) {
                nums[i] = nums[j];
                nums[j] = 0;
            }
            i++;
        }
        j++;
    }
}

posted on 2024-11-04 21:05  oYYo  阅读(3)  评论(0编辑  收藏  举报

导航