以初学者用c语言 给你一个非空整数数组nums,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现一次的元素。
时间: 2023-12-05 21:23:18 浏览: 85
好的,这是一道比较经典的题目,我们可以用哈希表或者异或运算来解决这个问题。
1. 哈希表方法:
我们可以使用一个哈希表,遍历整个数组,将每个元素的值作为哈希表的键,将出现次数作为值,最后再遍历一遍哈希表,找出值为1的键即可。
具体实现如下:
```c
int singleNumber(int* nums, int numsSize){
int i, res;
int hash[100000] = {0}; // 哈希表数组初始化为0
for(i = 0; i < numsSize; i++){
hash[nums[i]]++; // 将元素的值作为键,出现次数作为值
}
for(i = 0; i < 100000; i++){ // 遍历哈希表
if(hash[i] == 1){
res = i;
break;
}
}
return res;
}
```
2. 异或运算方法:
我们可以使用异或运算,因为异或运算具有结合律和交换律,所以相同的元素异或运算的结果为0,而任何数与0进行异或运算的结果都为它本身,所以最后的结果就是那个只出现一次的元素。
具体实现如下:
```c
int singleNumber(int* nums, int numsSize){
int i, res = 0;
for(i = 0; i < numsSize; i++){
res ^= nums[i];
}
return res;
}
```
其中,^表示异或运算符,numsSize表示数组的长度,nums表示数组的首地址。
阅读全文
相关推荐
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231044947.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)