Наиболее частый элемент массива
Есть задача
Дан массив, состоящий из N целых чисел, упорядоченных по неубыванию.
Определите, какое число встречается в массиве чаще всего.
Выведите одно целое число — наиболее часто встречающийся элемент массива. Если подходящих ответов несколько, выведите максимальный из них.
И вот входные/выходные данные
входные данные
5
1 2 3 4 5
выходные данные
5
входные данные
8
12 25 25 28 31 31 31 96
выходные данные
31
Я написал такой код
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> v;
int n, e;
cin>> n;
for (int i = 0; i < n; i++)
{
cin >> e;
v.push_back(e);
}
int maxcount(1), nn(-1);
for (int i = 0; i < v.size(); i++)
{
int count(0);
for (int j = i; j < v.size(); j++)
if (v[i] == v[j])
count++;
if (maxcount < count)
{
maxcount = count;
nn = i;
}
}
if (nn > -1){
cout << v[nn];
}
else
cout << *v.rbegin();
return 0;
}
Как я могу вывести максимальный элемент, если таких несколько?
P.S. Как я понял, если нет повторяющихся, то нужно вывести последний элемент)?
Ответы (1 шт):
Автор решения: AlexGlebe
→ Ссылка
В условии задачи написано : "Если подходящих ответов несколько, выведите максимальный из них.". Это значит, нужно чуток расписать эту ситуацию так :
int maxcount(0),...
...
if ( maxcount <= count )
{
maxcount = count;
nn = i;
}
...
cout << v[nn];
Если количество совпало с максимальным ИЛИ больше, то менять на новое. Так как у вас цикл движется от маленьких значениях до больших, то конкурент всегда больше.
Чтобы была возможность правильно выбирать максимальное число, если в числах встречаются отрицательные нужно поставить начальное значение maxcount = 0