Во-первых, вы должны избавиться от неверного номера -999. Просто спросите map.empty (), прежде чем продолжить.
Тогда, я думаю, недопустимо увеличивать элементы на карте, которых раньше не было. Я предполагаю, что новый член создается с унифицированным (случайным) значением, так как для int нет конструктора по умолчанию.
Вы можете сделать что-то еще:
map<int, int>::iterator it = m.find(i);
if (it != m.end())
m.second++;
if (m.second > mostTimes) {
// reset mostTimes and maxNumber = m.first here
}
} else {
m[i] = 1;
}
Эта операция O (n) и, следовательно, имеет тот же класс сложности времени, что и итерация по карте снова, чтобы найти элемент max (где в худшем случае все входные числа различны, и карта будет иметь одинаковое количество членов, чем входной массив). Разница, однако, заключается в том, что большинство значений TimeM и MaxNumbers могут перезаписываться много раз, и может случиться так, что они не вписываются в регистры ЦП и происходит много обращений к ОЗУ. Так что, вероятно, выполнение итерации впоследствии будет быстрее на практике.