题目名称

给定一个数组,包含从 1 到 N 所有的整数,但其中缺了两个数字。你能在 O(N) 时间内只用 O(1) 的空间找到它们吗?

以任意顺序返回这两个数字均可。

示例

输入: [1]
输出: [2,3]

题解

从题意可以,给定的这个数组长度应该为n,而且期内的元素不重复,且包含从1到n的所有整数

但是由于缺失了两个数字,所以现在长度变为 n - 2

所以我们可以生成一个新的数组,长度为 n,默认所有元素都为0

然后遍历给定的数组,将每个元素按照其在 1-n 中的位置,将新的数组对应位置置为1

然后遍历这个数组,将元素为0的序号return 出来就是我们想要得到的内容

答案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/**
* @param {number[]} nums
* @return {number[]}
*/
var missingTwo = function(nums) {
let arr = new Array(nums.length + 2).fill(0)
nums.forEach(item => {
arr[item - 1] = 1
})
let newArr = []
arr.forEach((item,index) => {
if(!item) {
newArr.push(index + 1)
}
})
return newArr
};