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。 is(索引从0开始)的第二大元素是16。

示例

让我们看看以下实现以获得更好的理解 -

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中找出两个数组元素的第k大乘积的程序 的全部内容, 来源链接: utcz.com/z/317209.html

回到顶部