⑩给定一个包含 [0, n] 中 n 个数的数组 nums ⑪找出 [0, n] 这个范围内没有出现在数组中的那个数
时间: 2024-05-01 17:19:45 浏览: 44
解法1:排序
首先对数组进行排序,然后从头到尾扫描数组,如果当前位置的值不等于它的下标,则缺失的数为当前下标。
时间复杂度:O(nlogn),空间复杂度:O(1)
解法2:哈希表
遍历数组,将每个出现过的数存入哈希表中。然后再从0到n遍历一遍,查找哈希表中是否存在该数,若不存在,则该数为缺失的数。
时间复杂度:O(n),空间复杂度:O(n)
解法3:异或运算
将数组中的所有数和它们的下标进行异或运算,然后再将0到n进行异或运算,最后两个异或结果的异或结果就是缺失的数。
时间复杂度:O(n),空间复杂度:O(1)
代码示例(解法3):
```
int missingNumber(vector<int>& nums) {
int res = nums.size();
for (int i = 0; i < nums.size(); i++) {
res ^= nums[i];
res ^= i;
}
return res;
}
```
相关问题
python实现给定一个包含[0,n]中 n 个数的数组 nums,找出[0,n]这个范围内没有出现在 数组的那个数
:你可以使用异或运算来解决这个问题。首先将数组中的所有数与从 1 到 n 的所有数进行异或操作,得到的结果就是缺失的那个数。
例如:
nums = [0, 1, 3, 4, 5, 6]
n = 6
missing = n ^ (nums[0] ^ nums[1] ^ ... ^ nums[n-1])
missing = 2
因为缺失的数为 2。
C语言表达给定一个包含 [0, n] 中 n 个数的数组 nums ,找出 [0, n] 这个范围内没有出现在数组中的那个数。
在C语言中,为了找到一个范围[0, n]内没有出现在数组`nums`中的数,你可以采用一种称为“差分数组”的方法。这个方法的基本思想是创建一个新的数组,其元素为原数组相邻元素的差值。然后遍历这个新数组,寻找第一个非零元素的位置,该位置对应的数值就是未在原数组中出现的数。
以下是简单的步骤:
1. 初始化一个大小为n+1的新数组diff,其中diff[i] = i - nums[i] (当i在数组范围内)。
2. 遍历diff数组,如果遇到的第一个非零元素的位置记为pos,那么nums[pos]就是你要找的数。
3. 因为diff数组从0开始,所以如果diff数组全为0,说明所有数字都出现了,此时返回n作为结果。
这里需要注意边界条件和数组越界的情况。下面是伪代码示例:
```c
int findMissing(int* nums, int n) {
if (nums == NULL || n <= 0) return -1; // 检查输入合法性
int* diff = malloc(n * sizeof(int)); // 创建差分数组
for (int i = 1; i <= n; i++) {
diff[i] = i - nums[i];
}
for (int i = 1; i <= n; i++) { // 找到第一个非零元素
if (diff[i]) {
free(diff); // 释放差分数组内存
return i;
}
}
free(diff);
return n; // 如果diff数组全为0,返回n
}
阅读全文