python实现给定一个包含[0,n]中 n 个数的数组 nums,找出[0,n]这个范围内没有出现在 数组的那个数
时间: 2023-06-04 08:05:17 浏览: 58
:你可以使用异或运算来解决这个问题。首先将数组中的所有数与从 1 到 n 的所有数进行异或操作,得到的结果就是缺失的那个数。
例如:
nums = [0, 1, 3, 4, 5, 6]
n = 6
missing = n ^ (nums[0] ^ nums[1] ^ ... ^ nums[n-1])
missing = 2
因为缺失的数为 2。
相关问题
⑩给定一个包含 [0, n] 中 n 个数的数组 nums ⑪找出 [0, n] 这个范围内没有出现在数组中的那个数
可以使用哈希表或者异或操作来解决这个问题。
方法一:哈希表
我们可以使用一个哈希表,遍历数组 nums 中的每一个数,将其加入哈希表中。然后再遍历 [0, n] 这个范围内的所有数,如果某个数不在哈希表中,那么该数就是缺失的数。
方法二:异或操作
我们知道,异或操作具有自反性和结合律,即 a^b^b=a 和 a^b^c=a^c^b。因此,我们可以先将 [0, n] 中的所有数以及数组 nums 中的所有数进行异或操作,然后得到的结果就是缺失的数。
具体实现可以如下:
```python
# 方法一:哈希表
def findMissingNumber(nums):
hash_set = set(nums)
n = len(nums)
for i in range(n+1):
if i not in hash_set:
return i
# 方法二:异或操作
def findMissingNumber(nums):
res = len(nums)
for i in range(len(nums)):
res ^= i ^ nums[i]
return res
```
以上两种方法的时间复杂度均为 O(n),空间复杂度分别为 O(n) 和 O(1)。
给你一个非空数组nums,找出此数组中的最大数。 c语言实现
可以使用循环遍历数组,依次比较每个数与当前最大值的大小,更新最大值。具体代码如下:
```c
#include <stdio.h>
int main() {
int nums[] = {3, 9, 2, 5, 1, 8};
int len = sizeof(nums) / sizeof(nums[0]); // 数组长度
int max_num = nums[0]; // 假设第一个数为最大值
for (int i = 1; i < len; i++) { // 从第二个数开始遍历
if (nums[i] > max_num) { // 如果当前数比最大值大
max_num = nums[i]; // 更新最大值
}
}
printf("最大数为:%d\n", max_num);
return 0;
}
```
输出结果为:
```
最大数为:9
```