Наиболее часто встречающийся элемент
Имеется массив, нужно найти в нем максимальный элемент среди наиболее часто встречающихся.
Я делал вот так. Ввод данных с клавиатуры:
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()
Дополнение к вашему коду. Вы бежите по парам элемент/счётчик и выбираете из них самую большую, сперва по счётчику, затем по значению (для этого 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)
или еще так:
n = int(input())
new = list(map(int, input().split()))
res = max(sorted(new, reverse=True), key=lambda x: new.count(x))
Вполне можно за линию найти этот максимум. Сорри что на С++ но не думаю что будет сложно перевести этот код на питон.
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;
}
Тоесть дальше банально ищется максимум с предпроверкой на частоту появления.