栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Python-查找第二个最小数字

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python-查找第二个最小数字

确实可以修改该函数以找到第二个最小的函数:

def second_smallest(numbers):    m1, m2 = float('inf'), float('inf')    for x in numbers:        if x <= m1: m1, m2 = x, m1        elif x < m2: m2 = x    return m2

旧版本依赖于Python
2实施细节,该细节

None
始终排在其他任何东西之前(因此测试为“较小”);我取代了使用
float('inf')
作为前哨,为无穷大总是测试,
更大的
比任何其它号码。理想情况下,应该使用原始函数
float('-inf')
代替原始函数
None
,以免与其他Python实现可能不共享的实现细节相关联。


演示:

>>> def second_smallest(numbers):...     m1, m2 = float('inf'), float('inf')...     for x in numbers:...         if x <= m1:...  m1, m2 = x, m1...         elif x < m2:...  m2 = x...     return m2... >>> print second_smallest([1, 2, 3, 4])2

在您发现的函数之外,使用该

heapq.nsmallest()
函数从迭代器返回两个最小值,并从这两个中选择第二个(或最后一个)值几乎一样有效:

from heapq import nsmallestdef second_smallest(numbers):    return nsmallest(2, numbers)[-1]

像上面的实现一样,这是一个O(N)解决方案。保持堆变量的每一步都需要logK时间,但是K在这里是一个常数(2)!无论您做什么, 都不要使用sort
;这需要O(NlogN)时间。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/637779.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号