Как уже упоминалось в другом ответе, ваш счет составляет O(n^2)
сложность времени, из-за которой превышен ваш лимит времени.К счастью, python поставляется с объектом Counter
в модуле collections
, который будет делать то же самое, что описано в другом ответе, но в хорошо оптимизированном C-коде.Это снизит вашу временную сложность до O(nlogn)
.
Более того, вы можете уменьшить свою временную сложность до O(nlogk)
, заменив вызов сортировки трюком с минимальной кучей.Оставьте минимальную кучу размером k
, добавьте другие элементы и вставляйте минимальную по одному, пока все элементы не будут вставлены (в тот или иной момент).k
, которые остаются в куче, являются вашими максимальными значениями k
.
from collections import Counter
from heapq import heappushpop, heapify
def get_most_frequent(nums, k):
counts = Counter(nums)
counts = [(v, k) for k, v in counts.items()]
heap = counts[:k]
heapify(heap)
for count in counts[k:]:
heappushpop(heap, count)
return [k for v, k in heap]
Если вы должны вернуть элементы в любом конкретном порядке, вы можете отсортировать элементы k
за O(klogk)
время.что все равно приводит к такой же O(nlogk)
сложности времени в целом.