gpt4 book ai didi

python - 找到给出最大总和的对,使得第二个元素在第一个之后

转载 作者:行者123 更新时间:2023-12-04 00:18:39 25 4
gpt4 key购买 nike

假设我有两个长度相等的 numpy 数组:

a = np.array([1, 3, 5, 3, 2, 0])
b = np.array([1, 1, 2, 2, 4, 3])

在所有满足j >= ii, j 中,我如何找到i j 这样

a[i] + b[j]

最大化了吗?

鉴于我的实际用例,并列的可能性很小,但如果有的话,返回最小的 ij 就可以了。

最佳答案

这里是 O(n)方法:

A = np.maximum.accumulate(a)
B = np.maximum.accumulate(b[::-1])[::-1]

c = (A+B).argmax()
i = a[:c+1].argmax()
j = c + b[c:].argmax()
i,j
# (2, 4)

它是如何工作的:

我们首先引入一个额外的约束 i <= c <= j ;然后通过最大化 c 来摆脱它.

我们得到的是给定 c约束最好ijc 向后和向前看很容易找到.

谜题的最后一 block 是计算所有 c 的最佳总和的累积最大值技巧。在 O(n) .

关于python - 找到给出最大总和的对,使得第二个元素在第一个之后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62331775/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com