假设我们有一个称为nums的数字列表,另一个值为k,表示连接k次的大量nums列表。我们必须找到具有最大和的连续子列表的和。
因此,如果输入像nums = [1,3,4,-5],k = 1,那么输出将是11,因为我们可以像[2,4,5]那样使用子列表
为了解决这个问题,我们将遵循以下步骤-
s:= ans:= lo:= 0
对于范围0到k的最小值和2的所有值,请执行
s:= s + x
lo:= lo,s的最小值
ans:= ans,s-lo的最大值
对于每个以num为单位的x
返回ans +最大值0和所有nums元素的总和*最大值0和(k-2)
让我们看下面的实现以更好地理解-
class Solution: def solve(self, nums, k): s = ans = lo = 0 for _ in range(min(k, 2)): for x in nums: s += x lo = min(lo, s) ans = max(ans, s - lo) return ans + max(0, sum(nums)) * max(0, (k - 2)) ob = Solution()nums = [2, 4, 5, -4] k = 1 print(ob.solve(nums, k))
[2, 4, 5, -4], 1
输出结果
11