移动零-简单

难度:简单

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

示例:

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

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


解题思路:

  1. 利用双指针,遍历数组,当前元素值为 0,位置移动后右指针前移,当前元素不为 0 时,左指针前移


代码实现:

var moveZeroes = function (data) {
  let i = 0;
  let j = data.length;
  while (i < j) {
    if (data[i] === 0) {
      data.splice(i, 1);
      data.push(0);
      j--;
    }
    if (data[i] !== 0) {
      i++;
    }
  }
  return data;
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
  1. 双指针,i 用来遍历数组,j 表示最后一个 0 的下标
  • 当 i 遇到 0 时,i++
  • 当 i 不是 0 时,j+1,如果 j<i,nums[j] = nums[i], nums[i] =0
var moveZeroes = function (nums) {
  let i = 0,
    j = 0;
  while (i < nums.length) {
    if (nums[i] != 0) {
      if (j < i) {
        nums[j] = nums[i];
        nums[i] = 0;
      }
      j++;
    }
    i++;
  }
  return nums;
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

最后更新时间: 4/20/2020, 10:07:04 PM