【发布时间】:2015-11-10 09:37:13
【问题描述】:
我在 Python 中找不到以下功能:
给定一组数字,返回小于或等于
n的最大数字,如果不存在这样的数字,则返回None。
例如,给定列表 [1, 3, 7, 10] 和 n = 9,该函数将返回 7。
我正在寻找类似于Java's TreeSet.lower 的 Python 功能。
我可以使用另一种数据结构。堆似乎合适。
O(n) 解决方案对于问题的规模来说太慢了。我正在寻找 O(log n) 的解决方案。
背景
我正在处理https://www.hackerrank.com/challenges/maximise-sum。可能的值范围是 1 - 10^14,所以使用带二分查找的排序列表太慢了。
我目前的想法是直接迭代Python's heapq backing array。我希望可能会有更多 Pythonic 的东西。
【问题讨论】:
-
这个问题是要求您支持对同一数据进行重复搜索吗?对于单个搜索,将无序列表转换为另一个数据结构几乎肯定已经是 O(n)。
-
是的,这个问题是一个最大子序列问题。所以对于
n元素,我需要使用上面描述的lookup。所以,我真的需要lookup花费 O(log n) 时间来支持 O(n log n) 的整体复杂度。
标签: python algorithm heap dynamic-programming