在Python中查找最小和最大元素

时间:2016-02-11 06:35:35

标签: python algorithm

假设我正在维护一组整数(将动态添加/删除,并且整数可能具有重复值)。我需要有效地找到当前元素集的max / min元素。想知道是否有更好的解决方案?

我目前的解决方案是维护最大堆和最小堆。我正在使用Python 2.7.x并且可以打开任何第三方pip插件来解决我的问题。

3 个答案:

答案 0 :(得分:2)

只需使用minmax功能即可。保持堆是没有意义的。如果要在添加删除元素时多次执行此操作(获取最小值/最大值),则需要最小/最大堆。

不要忘记构建一个堆需要花费O(n)时间,其中常量为2(据我记得)。只有这样,您才能使用xlswrite时间来获取最小/最大值

P.S。现在好了,你已经告诉你必须多次调用min / max,你必须做两个堆(最小堆和最大堆)。构建每个堆需要O(log(n)),然后每个操作(添加元素,删除元素,查找最小/最大)将采用O(n),在这里你可以添加/删除元素到两个堆并执行最小/最大在相应的堆上。

如果您将使用列表中的最小/最大函数,那么您不需要构建任何内容,并且将添加O(log(n)),删除O(1)和min / max {{1} },这比堆更糟糕。

P.P.S python has heaps

答案 1 :(得分:1)

  

分钟(list_of_ints)

将产生最低限度的清单......

  

max(list_of_ints)

将产生列表的最大值。

希望有所帮助....

答案 2 :(得分:1)

使用排序列表可能有所帮助。第一个元素总是最小的,最后一个元素总是最大的,O(1)复杂度得到的值。

使用二进制搜索来添加/删除已排序的列表将是O(log(n))