Как реализовать приоритетную очередь или кучу в Ruby? - PullRequest
0 голосов
/ 22 мая 2018

У меня есть:

words = ["i", "love", "leet", "i", "love", "code"]
k = 3

"i" и "love" появляются дважды, но "leet" и "code" появляются один раз.Я хочу:

["i", "love", "code"]

вместо "leet".Этот код:

words.group_by(&:itself).sort_by {|_, s| -s.length}.first(k).map(&:first)

отобразит:

["i", "love", "leet"]

Какой хороший способ решить эту проблему?

Это можно решить с помощью кучи, но Rubyне поддерживает кучи.Есть ли рекомендации?Я хотел бы сделать это без использования драгоценного камня, чтобы я мог демо-версию на сайте онлайн-тестирования кода.

========================================================================= k для частоты Так что этот вопрос для поиска k частотных слов в массиве слов.когда k - 3 вопроса, я выбираю code, а не leet.Я хочу отсортировать по алфавиту, когда есть слова с одинаковой частотой, поэтому я могу выбрать первое.

1 Ответ

0 голосов
/ 22 мая 2018

Если вы хотите отсортировать по алфавиту при одинаковой частоте, выполните сортировку по алфавиту :

words.group_by { |w| w }.
      sort_by { |w, a| [-a.size, w] }. # ⇐ HERE
      map(&:first).
      first(3)
#⇒ ["i", "love", "code"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...