description
给一个元素>=1,<=数组长度的数组,有些元素出现了两次,而其他元素则出现一次,找出在[1,n]范围内的不出现在数组中的元素。
要求是最好在O(1)的空间里完成。
思路
这题,我想了几分钟,发现想不出来,看了讨论区,发现他们的做法好巧妙,觉得这道题考验眼力,[1, n],每个元素都减1后,就成了数组的下标。通过这个做法就可以找出不存在于数组的元素。
代码
/**
* @param {number[]} nums
* @return {number[]}
*/
var findDisappearedNumbers = function(nums) {
const res = [];
for(let i of nums) {
let val = Math.abs(i) - 1;
if (nums[val] > 0) {
nums[val] = -nums[val];
}
}
nums.forEach((item, index) => {
if (item > 0) {
res.push(index + 1);
}
})
return res;
};