在Python中以递归方式查找int列表中的第k个最大int

时间:2016-02-22 21:08:47

标签: python recursion

作为编程的新手,我正在尝试执行一个函数来查找整数列表列表中的第k个最大的int。我之前尝试过一下这个列表并且有效。

然而,对于这个功能,它的基本情况有太多可能性:

例如:[1, 2], [[], 1], [[1], 2], [[1], [1]]

我被困在基础案件中。任何人都可以给我一个暗示吗?

此功能的操作如下:

find_2smallest([1,1,3])->1
find_2smallest([[1,[]], 9, [[1], [3]], [4]])->3

2 个答案:

答案 0 :(得分:2)

一些提示:

编写一个flatten函数将列表层次结构转换为单个集合(具有唯一元素),排序并选择第k个元素。

示例实施

from django.contrib.staticfiles.storage import ManifestStaticFilesStorage
from django.conf import settings


class BigBlindManifestStaticFilesStorage(ManifestStaticFilesStorage):

    def url(self, name, force=True):
        """
        Override .url to use hashed url in development
        """
        return super(ManifestStaticFilesStorage, self).url(name, True)

当然,这种方法效率最高(也许效率最低)。您可以从每个子级别返回前k个元素,并在每次合并时修剪第k级。

答案 1 :(得分:0)

我使用带有默认值的额外参数编写了一个通用解决方案(您指定k),以跟踪到目前为止找到的k的最小集合,以及这是否是递归的最高级别或一个子级别。子级返回当前最小子集,顶级返回最后一个条目(即k th 最小值)。使用k的{​​{1}}方法维护最小的heapq集。

nsmallest