非遍历 查找数组中未出现的数

95 阅读1分钟

题目

image.png

  • 因为数组长度为n的其中元素都1<=arr[i]<=n,那么将索引和值关联,让值-1==索引,所以遍历数组中元素,将元素放到对应位置,原位置的数被取代时继续放到对应位置,最好遍历数组,如果值和索引不匹配,打印索引+1即是缺的数
function process(arr) {
  for (let i = 0; i < arr.length; i++) {
    modify(arr[i], arr);
  }

  for (let i = 0; i < arr.length; i++) {
    if (arr[i] !== i + 1) {
      console.log(i + 1);
    }
  }

  function modify(value, arr) {
    while (arr[value - 1] !== value) {
      let temp = arr[value - 1];
      arr[value - 1] = value;
      value = temp;
    }
  }
}

process([1, 3, 3, 4]);