Если числа целые, неотрицательные и небольшие, то просто заведите второй массив, чтобы в нем считать, сколько раз каждое число встретилось. При увеличении счетчика сразу же проверяйте значение на максимум.
Как то так:
maxval = -1;
maxcount=0;
for (i = 0; i < n; ++i) {
++counts[a[i]];
if (counts[a[i]] > maxcount) {
maxcount = counts[a[i]];
maxval = a[i];
}
}
Если числа большие, то можно заменить массив counts[] на hash map.
Если ограничения по памяти серьезные, то придется отсортировать массив и в нем уже можно легко подсчитать сколько раз каждое число встречается.