我正在处理一个问题,我需要跟踪列表中的最小数量。然而,这个列表不断减少,比如从一百万个元素到一个元素。我正在寻找一种方法,以避免每次我得到一个单元素较小的列表时检查最小值。跟踪最小元素一样,如果删除,则下一个最小值变为最小值。我想在线性时间内完成这个任务。(考虑到问题的机制,这应该是可以实现的)
自从我开始使用以来,我可以使用collections Counter
来计算列表中的元素。然后我找到最小值(已经O(2*n)
),每次删除一个元素时,我从字典键的值中减去1。但是,当最小数量的计数耗尽时,我仍然需要找到第二个最小元素,以便它可以替换它。
请帮我找到解决方法。我想说这是一个有趣的问题。
答案 0 :(得分:1)
让我们说你的程序需要一些时间来对该列表进行排序
a = [10,9,10,8,7,6,5,4,3,2,1,1,1,0] # you're just removing
a = sorted(a) #sort ascending
# then you remove stuff from your list
# but always a[0] is minimum element
min = a[0] #you must be careful, there must be at least one item so check that before
#getting the min
所以每次都不需要搜索