前端面试真题,2周刷完100道。13. 将数组中的 0 移动到末尾

95 阅读1分钟

将数组中的 0 移动到末尾

输入[1,0,12,0,13,0] 输出 [1,12,13,0,0,0] 只移动0 其他位置不变 在原数组进行操作

splice 实现

之前的对数组特点已经讲过, splice 类似与shift ,本生的时间复杂度位O(n),再加上数组的遍历,复杂度就是 O(n^2) 虽然不可取, 在这里 也实现下

splice 方式代码实现

function moveZero(arr:number[]): void {
  const len = arr.length;
  if (len===0) return;
  let zeroLen = 0
  for (let i=0; i<len-zeroLen; i++) {
    if (arr[i] === 0) {
      arr.push(0)
      arr.splice(i,1)
      i--
      zeroLen++
    }
  }
  console.log(arr)
}
moveZero([1,0,2,0,3,0])

双指针思路

双指针是解决嵌套循环的一种思路 可以创建两个指针 i j j指向第一个为0 的元素, i指向 j 后面第一个不为0 的元素,然后进行互换

shuzhizhen.jpg

双指针实现

function moveZero2(arr) {
    var len = arr.length;
    if (len === 0)
        return;
    var j = -1;
    for (var i = 0; i < len; i++) {
        if (arr[i] === 0 && j < 0) {
            j = i;
        }
        if (arr[i] != 0 && j >= 0) {
            var n = arr[i];
            arr[i] = arr[j];
            arr[j] = n;
            j++;
        }
    }
    console.log(arr);
}
moveZero2([1, 0, 2, 0, 3, 0]);

2周刷完100道前端优质面试真题 mu课 视频及资料领取请关注公众号:奋斗的刚子