Ответ 1
Я думаю, что ваш подход заключается в использовании другого массива размером k
как вашего "хэш-карты". Если k
огромен, но количество уникальных элементов не так велико, вы будете тратить много места. Кроме того, чтобы найти большинство, вам нужно будет пропустить ваш хэш-массив map_of
, чтобы найти max.
С другой стороны, словарь/набор (где хеширование не является вашей проблемой, а основная структура массива, вероятно, будет более компактной для средних случаев) кажется немного более подходящей. Излишне говорить, что с появляющимися элементами как ключами и их вхождениями в качестве значений вы можете найти то, что хотите в одной итерации.
Итак, что-то вроде:
def find_majority(k):
myMap = {}
maximum = ( '', 0 ) # (occurring element, occurrences)
for n in k:
if n in myMap: myMap[n] += 1
else: myMap[n] = 1
# Keep track of maximum on the go
if myMap[n] > maximum[1]: maximum = (n,myMap[n])
return maximum
И как и ожидалось, мы получаем то, что хотим.
>>> find_majority([1,2,3,4,3,3,2,4,5,6,1,2,3,4,5,1,2,3,4,6,5])
(3, 5)
Конечно, счетчики и другие классные модули позволят вам делать то, что вы хотите, в более тонком синтаксисе.