给定一个数组,包含从 1 到 N 所有的整数,但其中缺了两个数字。你能在 O(N) 时间内只用 O(1) 的空间找到它们吗?
以任意顺序返回这两个数字均可。
示例 1:
输入:
[1]
输出: [2,3]
示例 2:
输入:
[2,3]
输出: [1,4]
提示:
nums.length <= 30000
解题
/**
* @param {number[]} nums
* @return {number[]}
*/
var missingTwo = function (nums) {
const len = nums.length;
for (let i = 0; i < len; i++) {
let n = Math.abs(nums[i]);
nums[n - 1] = n > len ? 0 : -nums[n - 1];
}
let res = [];
for (let i = 0; i < nums.length; i++) {
if (nums[i] === undefined || nums[i] > 0) {
res.push(i + 1);
}
}
if (res.length === 0) {
res.push(len + 1, len + 2);
} else if (res.length === 1) {
res.push(len + 2);
}
return res;
};