在Python中找到线性时间中的第k个最小元素的程序

在Python中找到线性时间中的第k个最小元素的程序

假设我们有一个名为nums的数字列表,我们还有另一个值k,我们必须找到列表中第k个(从0开始)最小的元素。我们必须平均在O(n)时间内解决这个问题。

因此,如果输入是nums = [6、4、9、3、1] k = 2,则输出将为4,因为将列表排序后将变为[1、3、4、6、9],第k个最小元素是4。

要解决这个问题,我们将遵循以下步骤−

  • maxHeap:=一个新的空堆
  • 对于范围从0到k的i,执行以下操作
    • 将nums [i]插入maxHeap中
  • 对于范围从k + 1到nums大小-1的i,执行以下操作
    • 如果nums [i]> maxHeap [0],则
      • 从maxHeap中删除顶部
      • 将nums [i]插入maxHeap中
  • 返回maxHeap [0]

例子

让我们看一下以下实现以更好地理解−

from heapq import heappop, heappush
def solve(nums, k):
    maxHeap = []
    for i in range(k + 1):
        heappush(maxHeap, -nums [i])
    for i in range(k + 1, len(nums)):
        if nums [i] < -maxHeap [0]:
            heappop(maxHeap)
            heappush(maxHeap, -nums [i])
    return -maxHeap [0]

nums = [6、4、9、3、1]
k = 2
print(solve(nums,k))

输入

[6, 4, 9, 3, 1],2

输出

4

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程