создать карту идентификатора отдела -> счета.
таким образом вы получите коллекцию всех подсчетов по идентификатору.Вы также можете сохранить максимальный элемент, который является ссылкой на запись карты с наибольшим количеством.
алгоритм будет выглядеть примерно так:
1) Инициализировать карту и currentMax
2) перебрать сотрудников
3) для каждого сотрудника получить идентификатор отдела
4) сделать что-то вроде map.get (currentId)
a) если текущий счетчик равен нулю, инициализировать его
5) увеличить счетчик
6) если счетчик увеличен> currentMax, обновить currentMax
Этот алгоритм будет работать в O (n);Я не думаю, что вы можете стать лучше, чем это.Его сложность в пространстве также равна O (n), потому что количество отсчетов пропорционально размеру входных данных.
Если вы хотите, вы можете создать класс, который использует композицию (то есть содержит карту и список), а также управляет хранением указателей на запись с наибольшим количеством.Таким образом, эта часть вашей функциональности должным образом инкапсулирована.Более сильным преимуществом этого подхода является то, что он позволяет вам вести подсчет при вводе элементов в список (вы должны проксировать методы, которые добавляют сотрудников в список, чтобы они обновляли счетчик карты).Может быть, излишне.