在Python中找到两个数组元素的第k个最大积的程序

在Python中找到两个数组元素的第k个最大积的程序

假设我们有两个包含一些整数数字的列表p和q。我们必须将这些列表的所有值相乘,并找出乘法结果中的第k个最大值。

因此,如果输入为p = [2,5],q = [6,8],k = 2,则输出将为16。

乘法结果为:2 * 6 = 12,2 * 8 = 16,5 * 6 = 30,5 * 8 = 40。第二大的元素在(索引从0开始)是16。

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

  • 对列表p进行排序
  • 对列表q进行排序
  • k:= k + 1
  • 堆:=一个新的堆在列表表示中
  • 对于每个q中的元素,执行以下操作
    • 如果elem >= 0,则
      • 对于范围内的i(大小为p的大小 – 1)到-1,逐个递减,执行以下操作
      • cd:= elem * p [i]
      • 如果堆不为空且堆的大小与k相同并且cd <= heap [0],那么
        • 从循环中退出
      • 将值cd插入堆中
      • 如果长度为(堆)> k,则
        • 从堆中删除最小项
    • 否则,
      • 对于范围内的i从0到p的大小,执行以下操作
      • cd:= elem * p [i]
      • 如果堆不为空且堆的大小与k相同并且cd <= heap [0],那么
        • 从循环中退出
      • 将cd插入堆中
      • 如果长度为(堆)> k,则
        • 从循环中删除最小项
  • 返回堆[0]

示例

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

from heapq import heappush, heappop
def solve(p, q, k):
p = sorted(p)
q = sorted(q)
k += 1
heap = []
for elem in q:
if elem >= 0:
for i in range((len(p) - 1), -1, -1):
cd = elem * p[i]
if heap and len(heap) == k and cd <= heap[0]:
break
heappush(heap, cd)
if len(heap) > k:
heappop(heap)
else:
for i in range(len(p)):
cd = elem * p[i]
if heap and len(heap) == k and cd <= heap[0]:
break
heappush(heap, cd)
if len(heap) > k:
heappop(heap)
return heap[0]
print(solve([2, 5], [6, 8], 2))

输入

 [2,5],[6,8],2 

输出

 16 

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程