贪心法 求解出现次数最多的元素 且最小
时间: 2023-08-08 07:13:22 浏览: 51
假设有一个长度为n的数组A,要求出现次数最多的元素且最小,可以使用贪心法来解决。
具体步骤如下:
1. 对数组A进行排序,将相同的元素放在一起。
2. 维护两个变量,分别记录当前出现次数最多的元素和其出现次数。
3. 遍历数组A,对于每个元素,如果与上一个元素相同,则将当前元素的出现次数加1,否则将当前元素设为出现次数最多的元素,并将其出现次数设为1。
4. 遍历结束后,返回出现次数最多且最小的元素即可。
代码示例(使用C++语言):
```
#include <iostream>
#include <algorithm>
#include <unordered_map>
using namespace std;
int main()
{
int n;
cin >> n;
int a[n];
for (int i = 0; i < n; i++)
cin >> a[i];
sort(a, a + n);
int ans = a[0], cnt = 1, max_cnt = 1;
for (int i = 1; i < n; i++) {
if (a[i] == a[i-1])
cnt++;
else {
if (cnt > max_cnt) {
max_cnt = cnt;
ans = a[i-1];
}
cnt = 1;
}
}
if (cnt > max_cnt)
ans = a[n-1];
cout << ans << endl;
return 0;
}
```
上述代码中,首先对数组进行排序,然后遍历数组,统计每个元素的出现次数,并记录出现次数最多的元素和其出现次数。最后返回出现次数最多的元素即可。