javascript-leetcode icon indicating copy to clipboard operation
javascript-leetcode copied to clipboard

283. 移动零

Open Geekhyt opened this issue 5 years ago • 0 comments

原题链接

双指针

题目要求将所有 0 移动到数组的末尾,同时还要保持非零元素的相对顺序。

在此基础上附加了两个条件:

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

我们可以借助双指针来进行求解,求解过程如下:

1.初始化双指针 i 、j 指向数组头部索引 0。 2.将 i 指针不断向右移动,j 指针负责提供交换的位置,当遇到非 0 数字时,将两个指针位置的数字交换,同时继续向右边移动两个指针。这样交换可以保证题目要求的非 0 数字相对顺序不变。 3.当遇到 0 时,向右移动 i 指针,j 指针不动。 4.循环完成时即可将所有的 0 移动到数组的末尾。

const moveZeroes = function (nums) {
    let i = 0, j = 0;
    while (i < nums.length) {
        if (nums[i] != 0) {
            [nums[i], nums[j]] = [nums[j], nums[i]];
            i++;
            j++;
        } else {
            i++;
        }
    }
}
  • 时间复杂度: O(n)
  • 空间复杂度: O(1)

Geekhyt avatar Jan 23 '21 11:01 Geekhyt