📜  Python - 大于 K 的第 N 个最小的(1)

📅  最后修改于: 2023-12-03 14:45:53.923000             🧑  作者: Mango

Python - 大于 K 的第 N 个最小的

当我们需要找到一个数组中大于给定值K的第N个最小值时,我们可以使用Python中的堆排序来解决这个问题。 堆排序算法的时间复杂度为O(nlogn),即使在最坏情况下也是如此。

问题描述

给定一个数组和两个整数N和K。找到一个大于K的第N个最小值。

例如,如果给定的数组为[10,7,11,30,8],K为9,N为2,则输出为10。

解决方案

利用Python中的堆排序,可以轻松地解决这个问题。 堆是一种数据结构,可以在O(log n)的时间内对其进行插入和删除操作。 这使得它非常适合在数据中查找第N个最小值。

下面是Python代码片段:

import heapq 

def find_nth_smallest(arr, k, n): 
    heap = [] 
    for i in arr: 
        if i > k: 
            heapq.heappush(heap, i) # push into heap if i > k
    kth_smallest = None 
    for _ in range(n): 
        kth_smallest = heapq.heappop(heap) # pop from heap N times
    return kth_smallest 

# test the function 
arr = [10, 7, 11, 30, 8] 
k = 9 
n = 2 
result = find_nth_smallest(arr, k, n) 
print(result)

在此代码中,我们首先将大于给定值K的所有元素推入堆中。 然后,我们N次从堆中弹出元素,这将给我们大于K的第N个最小值。

总结

Python中的堆排序是一个非常快速和有效的解决方案,特别是在需要查找数组中的第N个最小值时。 如果数组很大,我们可以使用此方法快速找到所需的数字。