给出n个整数(每个整数均在int范围内),n为奇数,其中有且仅有一个数出现了奇数次,其余的数 都出现了偶数次。 找出出现了奇数次的那个数。
时间: 2024-09-22 08:03:49 浏览: 38
给定N个正整数,请统计奇数和偶数各有多少个-C语言代码
这是一个经典的哈希表(Hash Table)或者计数排序(Counting Sort)问题。给定一个数组,由于元素都是整数,并且出现次数有明显的奇偶性,我们可以利用这个特性快速找到那个唯一的奇数出现次数。
算法步骤大致如下:
1. 初始化一个大小为`max(int) + 1`的布尔数组(或哈希表)`count[]`,所有元素初始值设为0。这里假设输入的整数范围不大于`int`的最大值。
2. 遍历输入数组,对于每个元素`num`,更新`count[num]`的值,使其加一。遍历完成后,`count[]`数组的每个元素表示对应数字出现的次数。
3. 再次遍历`count[]`数组,查找第一个值为奇数的索引。这个索引对应的数字就是出现了奇数次的那个数。
```python
def find_odd_occurrence(nums):
count = [0] * (max(nums) + 1)
for num in nums:
count[num] += 1
for i, val in enumerate(count):
if val % 2 != 0:
return i
# 示例
nums = [1, 2, 3, 4, 5, 1, 2, 3, 1]
print(find_odd_occurrence(nums)) # 输出:4,因为数4出现了奇数次(3次)
```
阅读全文