用 Python 编写程序,查找两个不重叠子列表的最大和
pythonserver side programmingprogramming
假设我们有一个名为 nums 的数字列表和两个值 x 和 y,我们必须找到 nums 中长度分别为 x 和 y 的两个不重叠子列表的最大和。
因此,如果输入为 nums = [3, 2, 10, -2, 7, 6] x = 3 y = 1,则输出将为 22,因为长度为 3 的子列表我们选择 [3, 2, 10],而对于另一个子列表我们选择 [7]。
要解决这个问题,我们将遵循以下步骤 −
- P := 具有单个元素 0 的列表
- 对于 A 中的每个 x,执行
- 在 处插入(P 的最后一个元素 + x) P 的结尾
- 定义一个函数solve()。这将需要 len1、len2
- Q := 一个列表,其中元素 (P[i + len1] - P[i]) 对于每个 i,范围从 0 到 P - len1 的大小
- prefix := Q 的副本
- 对于 i,范围从 0 到 prefix - 1 的大小,执行
- prefix[i + 1] := prefix[i + 1] 和 prefix[i] 的最大值
- ans := -infinity
- 对于 i,范围从 len1 到 P - len2 的大小,执行
- left := prefix[i - len1]
- right := P[i + len2] - P[i]
- ans := ans 的最大值和 (left +右)
- 返回 ans
- 从主方法执行以下操作 −
- 返回solve(len1, len2)、solve(len2, len1)的最大值
让我们看看下面的实现以便更好地理解 −
示例
class Solution:
def solve(self, A, len1, len2):
P = [0]
for x in A:
P.append(P[-1] + x)
def solve(len1, len2):
Q = [P[i + len1] - P[i] for i in range(len(P) - len1)]
prefix = Q[:]
for i in range(len(prefix) - 1):
prefix[i + 1] = max(prefix[i + 1], prefix[i])
ans = float("-inf")
for i in range(len1, len(P) - len2):
left = prefix[i - len1]
right = P[i + len2] - P[i]
ans = max(ans, left + right)
return ans
return max(solve(len1, len2), solve(len2, len1))
ob = Solution()
nums = [3, 2, 10, -2, 7, 6]
x = 3
y = 1
print(ob.solve(nums, x, y))
输入
[3, 2, 10, -2, 7, 6], 3, 1
输出
22
相关文章
有用资源
python 参考教程 - 该教程包含有关 python 的更多信息:https://www.cainiaomax.com/python/

