class Solution:
def topKFrequent(self, nums: List[int], k: int) -> List[int]:
d = {i: nums.count(i) for i in nums}
s = sorted(d.items(), key= lambda x:x[1], reverse = True)
result = [s[i][0] for i in range(k)]
return result
O(n^2)
. Вы для каждого числа в массиве считатете, сколько раз оно туда входит проходя по массиву через nums.count(i)
. Оптимальное же решение работает O(n)
. Надо в хеш-таблице подсчитать, сколько раз каждое число встречается, потом через алгоритм QuickSelect выбрать k-ый c конца элемент.O(n log n)
отсортировать массив и потом за один проход подсчитать сколько раз каждое число встречается. Дальше можно второй раз отсортировать по количеству вхождений и выдать k-ый элемент. Это решение тоже пройдет. d = {i: nums.count(i) for i in nums}
class Solution:
def topKFrequent(self, nums: List[int], k: int) -> List[int]:
return sorted(set(nums), key=nums.count, reverse=True)[:k]