丢失的数字

排序,找到那个值不等于索引的第一个就是

1
2
3
4
5
6
7
8
9
10
11
/**
* @param {number[]} nums
* @return {number}
*/
var missingNumber = function (nums) {
const bank = nums.slice();
bank.sort((a, b) => a - b);
for (let i = 0; i <= bank.length; i++) {
if (bank[i] !== i) return i;
}
};

由于[0,n]的和是((1+n)*n)/2固定的,每次减去数组内的值,剩下的就是那个数
时间复杂度O(n),空间复杂度O(1)

1
2
3
4
5
6
7
8
9
10
11
12
13
/**
* @param {number[]} nums
* @return {number}
*/
var missingNumber = function (nums) {
const n = nums.length;
let sum = ((1 + n) * n) / 2;
for (let i = 0; i < n; i++) {
sum -= nums[i];
}
return sum;
};
// console.log(missingNumber([3, 0, 1]));

a^a=0
a^0=a

1
2
3
4
5
6
7
function missingNumber(nums) {
let res = nums.length;
for (let i = 0; i < nums.length; i++) {
res ^= i ^ nums[i];
}
return res;
}

只有要求的那个数字出现一次,其他数字出现两次,所以为零,剩下的数字就是那个答案


本站由 ao 使用 Stellar 1.29.1 主题创建。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。