给定一个整数数组和一个整数值 K,我的任务是编写一个函数,该函数将数组中该值的最高数字以及之前的 K 个条目打印到标准输出。
示例输入:
tps: 6, 9, 4, 7, 4, 1
k: 3
示例输出:
6
9
9
9
7
7
有人告诉我,我编写的代码对于大型数据集可以更加高效。我怎样才能使这段代码最有效?
def tweets_per_second(tps, k):
past = [tps[0]]
for t in tps[1:]:
past.append(t)
if len(past) > k: past = past[-k:]
print max(past)
最佳答案
您可以使用单调队列(对于任何 k 值,O(n))来实现线性时间复杂度。想法如下:
每个元素只添加到双端队列一次,最多删除一次。因此,时间复杂度是线性的,它不依赖于 K。这个解决方案是最优的,因为仅仅读取输入是 O(n)。
关于Python在过去的k个项目中找到最大的数字,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27870329/