Вариант школьный:
1) Ищите максимум от 0 до N-1
2) Меняете местами нулевой и найденный максимальный
3) Ищите максимум от 1 до N-1
Найденный максимум снова меняете, но теперь уже с первым элементом. Если нулевой и первый совпали - вы нашли максимум, который совпал более одного раза. Иначе - двигаетесь дальше, со второго элемента.
Вариант миддл - уеб разработчик на отдыхе:
1) Сортируете искомое
2) Ищите в отсортированном первый повтор.
Вариант для лентяев:
std::map m;
for(const auto&i:input)
{
++m[i];
}
for(auto i=m.rbegin();i!=map.rend();++i))
{
if(i->second>1)
{
cout << i->first << endl;
break;
}
}