移动 0

147 阅读1分钟

给定一个无序数组,里面包含 0,非 0 数字 需要按照原来的顺序排列,0 移动到最后

思路 遇到 0 的话, i 往前走,j 不动 遇到 非0 的话 ,ary[i] 与 ary[j] 进行交换,j 就是最后一位不为 0 的 下标 然后 继续遍历,从 j 开始,换成 0

      let ary = [1, 2, 0, 3, 4, 0];
      function moveZero(ary) {
        let j = 0;
        for (let i = 0; i < ary.length - 1; i++) {
          if (ary[i] !== 0) {
            ary[j++] = ary[i];
          }
        }
        for (let i = j; i < ary.length; i++) {
          ary[i] = 0;
        }
        console.log(ary, j);
      }
      moveZero(ary);

image.png

2022.5.14 添加新的思路

原理就是 遇到 0 的时候, j++ ,当遇到非 0 的时候,当前值与 第一个值为 0 的进行交换,然后当前值 变成 0

let ary = [1, 2, 0, 3, 4, 0];
      function moveZero(ary) {
        let j = 0;
        for (let i = 0; i < ary.length - 1; i++) {
          if (ary[i] == 0) {
            j++
          }else if(j!=0){
              ary[i-j] = ary[i]
              arr[i] = 0
          }
        }
       return ary
      }
      moveZero(ary);