C++:给定n个正整数,使用贪心算法,编写一个实验程序,并写出算法伪码,找出它们中出现次数最多的数,如果这样的数有多个,请输出其中最小的一个,例题:输入:6,10 1 10 20 30 20 输出:10
时间: 2024-12-24 07:18:18 浏览: 15
在C++中,可以使用贪心算法结合哈希表来解决这个问题。首先遍历输入数组,每次遇到一个数就更新其在哈希表中的计数,并记录当前出现次数最多且值最小的数。以下是算法的伪代码:
```plaintext
1. 初始化:设max_count = 0, max_num = INT_MAX, count_map = 空的哈希表
2. 遍历数组arr[0...n]:
a. 如果arr[i]不在count_map中,添加并设置其计数为1
b. 否则,增加arr[i]的计数到count_map[arr[i]] + 1
c. 检查当前计数count_map[arr[i]]是否大于max_count:
- 若是,则更新max_count为当前计数,并将max_num设为arr[i]
3. 最后,返回max_num作为结果
算法示例(伪代码):
```
function findMostFrequent(arr):
for i in arr:
if i not in count_map:
count_map[i] = 1
else:
count_map[i] += 1
if count_map[i] > max_count and (i <= max_num or (i < max_num && max_count == count_map[i])):
max_count = count_map[i]
max_num = i
return max_num
```
阅读全文