Наиболее часто встречающийся элемент

Имеется массив, нужно найти в нем максимальный элемент среди наиболее часто встречающихся.

Я делал вот так. Ввод данных с клавиатуры:

n = int(input())
new = list(map(int, input().split()))

Сопоставление каждому элементу из массива его частоты (количество вхождений):

mydict = {}
for elem in new:
    mydict[elem] = 0
for elem in new:
    mydict[elem] = mydict[elem] + 1

А как быть дальше? Можно ли за линию вытащить наиболее встречающийся элемент с наибольшем значением?


Ответы (4 шт):

Автор решения: Александр
from collections import Counter


def main():
    counter = Counter()

    list_integer = list(map(int, input("Введите числа через пробел-> ").split()))

    for integer in list_integer:
        counter[integer] += 1

    often_meets_number = max(counter, key=counter.get)
    print(f"Часто встречается число: {often_meets_number}")

if __name__ == '__main__':
    main()
→ Ссылка
Автор решения: Stanislav Volodarskiy

Дополнение к вашему коду. Вы бежите по парам элемент/счётчик и выбираете из них самую большую, сперва по счётчику, затем по значению (для этого lambda):

item, count = max(mydict.items(), key=lambda p: p[::-1])

Ваш код можно доработать используя collections.Counter:

import collections


input() # skip line
c = collections.Counter(map(int, input().split()))
item, count = max(c.items(), key=lambda p: p[::-1])
print(item, count)
→ Ссылка
Автор решения: SergFSM

или еще так:

n = int(input())
new = list(map(int, input().split()))

res = max(sorted(new, reverse=True), key=lambda x: new.count(x))
→ Ссылка
Автор решения: ampawd

Вполне можно за линию найти этот максимум. Сорри что на С++ но не думаю что будет сложно перевести этот код на питон.

int dupls_max(const std::vector<int>& v)
{
    int max_el = *std::max_element(v.begin(), v.end());
    std::vector<int> counts(max_el + 1);    
    for (int i=0; i < v.size(); ++i)
    {
        counts[v[i]]++;
    }
    int dupls_max = 0;
    for (int i=0; i < v.size(); ++i)
    {
        if (counts[v[i]] > 1)
        {
            if (v[i] > dupls_max)
                dupls_max = v[i];
        }        
    }    
    return dupls_max;
}

Тоесть дальше банально ищется максимум с предпроверкой на частоту появления.

→ Ссылка