给出N个正整数,其中只有一个数出现了奇数次,其余的数都出现偶数次。求那个出现了奇数次的数。1<=N<=1000,N肯定是奇数。所有出现的整数都不超过1000。

算法:给出N个正整数,其中只有一个数出现了奇数次,其余的数都出现偶数次。求那个出现了奇数次的数。1<=N<=1000,N肯定是奇数。所有出现的整数都不超过1000。

这个问题可以通过哈希表(unordered_map)来解决。遍历组,对于每个元素,检查其出现。如果当前元素已经在哈希表中,则减少它的计;否则增加计。因为只有一个奇数出现,所以当遇到第一个奇数的元素时,就是我们要找的答案。 以下是C++代码实现: ```cpp #include <unordered_map> int findSingle(int arr[], int n) { std::unordered_map<int, int> countMap; // 遍历组,更新元素的出现 for (int i = 0; i < n; i++) { countMap[arr[i]]++; } // 再遍历组,查找出现奇数的元素 for (int i = 0; i < n; i++) { if (countMap[arr[i]] % 2 == 1) { return arr[i]; } } // 如果没有找到,返回-1 或者抛异常,这里假设找不到则返回-1 return -1; } // 示例用法 int main() { int arr[] = {1, 2, 3, 4, 5, 1}; int n = sizeof(arr) / sizeof(arr[0]); int result = findSingle(arr, n); std::cout << "The number that appears odd times is: " << result << std::endl; return 0; } ``` 在这个代码中,`findSingle` 函接受一个整数组 `arr` 和长度 `n`,然后使用哈希表 `countMap` 存储每个元素及其出现。第一遍历结束后,哈希表中的键值对表示了所有元素的出现。第二遍历时,只要发现某个元素的计奇数,就立即返回这个元素。如果没有找到这样的元素,函返回 -1(实际应用中可以根据需修改返回值或处理方式)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值