Разбор задачи: (K) наиболее часто встречающихся элементов

Предложенный нами код решения:

 def topKFrequent(self, nums, k):
        """
        :type nums: List[int]
        :type k: int
        :rtype: List[int]
        """
        from collections import Counter as ct
        return [k for (k,v) in ct(nums).most_common(k)] 

1. Объявление функции

def topKFrequent(self, nums, k):

Здесь объявляется функция topKFrequent, которая принимает два аргумента:

  • nums: список целых чисел, в котором нужно найти наиболее часто встречающиеся элементы.
  • k: целое число, указывающее количество элементов, которые нужно вернуть.

Назначение функции: возвращать список из k наиболее часто встречающихся чисел.


2. Импорт модуля Counter

from collections import Counter as ct

Функция использует класс Counter из модуля collections.
Что делает Counter:

  • Counter предназначен для подсчета количества вхождений каждого элемента в коллекции.
  • Он создает словарь, где ключи — это уникальные элементы из коллекции, а значения — количество их вхождений.

Пример использования Counter:

nums = [1, 1, 1, 2, 2, 3]
count = Counter(nums)
# count = {1: 3, 2: 2, 3: 1}

3. Использование метода most_common

ct(nums).most_common(k)

Метод most_common у объекта Counter возвращает список кортежей, где каждый кортеж состоит из элемента и его частоты. Список отсортирован по убыванию частоты.

Пример:

nums = [1, 1, 1, 2, 2, 3]
count = Counter(nums).most_common(2)
# count = [(1, 3), (2, 2)]

В данном случае most_common(k) возвращает первые k самых частых элементов.


4. Формирование результата

return [k for (k, v) in ct(nums).most_common(k)]

Используется генератор списка для извлечения только самих элементов из результата most_common.

  • Каждый элемент результата most_common — это кортеж (элемент, частота).
  • В генераторе происходит выборка первого элемента (k) из каждого кортежа.

Пример:

nums = [1, 1, 1, 2, 2, 3]
result = [k for (k, v) in Counter(nums).most_common(2)]
# result = [1, 2]

Итоговое поведение

  1. Считается количество вхождений всех элементов с помощью Counter.
  2. Выбираются k самых частых элементов через most_common(k).
  3. Формируется список, содержащий только эти элементы.

Преимущества подхода

  1. Использование Counter делает подсчет частот интуитивно понятным и лаконичным.
  2. Метод most_common автоматически сортирует элементы и возвращает их в нужном порядке.
  3. Генератор списка обеспечивает компактность кода.

Пример работы

Входные данные:

nums = [1, 1, 1, 2, 2, 3]
k = 2

Код выполнения:

  1. Counter(nums) вернет: {1: 3, 2: 2, 3: 1}
  2. Counter(nums).most_common(2) вернет: [(1, 3), (2, 2)]
  3. Генератор списка извлечет элементы: [1, 2]

Выходные данные: [1, 2]

 


0

Вы должны Войти или Зарегистрироваться чтобы оставлять комментарии