该程序在Python中查找循环子列表的最大和

假设我们有一个数字num的列表,现在考虑一个num的循环列表,其中num的开始和结束是邻居。我们必须在循环列表中找到一个非空子列表的最大和。

因此,如果输入类似于nums = [2,3,-7,4,5],则输出将为14,因为我们可以将子列表[4、5、2、3]总计为14。

为了解决这个问题,我们将遵循以下步骤-

  • max_sum:=负无穷大,cur_max:= 0

  • min_sum:=正无穷大,cur_min:= 0

  • 对于以num为单位的每个num

    • cur_max:= num的最大值和cur_max + num

    • max_sum:= max_sum和cur_max的最大值

    • cur_min:= num的最小值和cur_min + num

    • min_sum:= min_sum和cur_min的最小值

  • 如果max_sum <= 0,则

    • 返回max_sum

  • 返回max_sum和的最大值(所有元素的总和(以nums为单位)-min_sum)

让我们看下面的实现以更好地理解-

示例

import math

class Solution:

   def solve(self, nums):

      max_sum = -math.inf

      cur_max = 0

      min_sum = math.inf

      cur_min = 0

      for num in nums:

         cur_max = max(num, cur_max + num)

         max_sum = max(max_sum, cur_max)

         cur_min = min(num, cur_min + num)

         min_sum = min(min_sum, cur_min)

      if max_sum <= 0:

         return max_sum

      return max(max_sum, sum(nums) - min_sum)

ob = Solution()

nums = [2, 3, -7, 4, 5]

print(ob.solve(nums))

输入值

[2, 3, -7, 4, 5]

输出结果

14

以上是 该程序在Python中查找循环子列表的最大和 的全部内容, 来源链接: utcz.com/z/355696.html

回到顶部