擅长:python、mysql、java
<p>@trincot似乎已经回答了这个问题,但如果有人正在寻找一种更快的方法,那么就使用Numpy,前提是<code>nums</code>可以存储为np.array:</p>
<pre><code>def topKFrequent_numpy(nums, k):
unique, counts = np.unique(nums, return_counts=True)
return unique[np.argsort(-counts)[:k]]
</code></pre>
<p>单速试验</p>
<pre><code>nums_array = np.random.randint(1000, size=1000000)
nums_list = list(nums_array)
%timeit topKFrequent_Counter(nums_list, 500)
# 116 ms ± 4.18 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
%timeit topKFrequent_heapq(nums_list, 500)
# 117 ms ± 3.35 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
%timeit topKFrequent_numpy(nums_array, 500)
# 39.2 ms ± 185 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
</code></pre>
<p>(对于其他输入值,速度可能会显著不同)</p>