在Python中查找具有正积的子数组的最大长度的程序

假设我们有一个名为 nums 的数组,我们必须找到所有元素的乘积为正的子数组的最大长度。我们必须找到具有正积的子数组的最大长度。

因此,如果输入类似于 nums = [2,-2,-4,5,-3],那么输出将为 4,因为前四个元素正在形成一个乘积为正的子数组。

为了解决这个问题,我们将按照以下步骤操作:

  • 定义一个函数util()。这将需要 s, e

  • 否定:= 0

  • ns := -1, ne := -1

  • 对于在 s 到 e 范围内的 i,做

    • 否定:=否定+ 1

    • 如果 ns 与 -1 相同,则

    • ne := i

    • ns := i

    • 如果 nums[i] < 0,则

    • 如果 neg 是偶数,那么

      • 返回 e-s+1

    • 除此以外,

      • 返回 e-ns 和 ne-s 的最大值

    • 从主要方法,执行以下操作 -

    • 答:= 0

    • s := -1, e := -1

    • 对于 i 在 0 到 nums 大小的范围内,请执行

      • e := i-1

      • ans := ans 的最大值和 util(s, e)

      • s := -1, e := -1

      • s := i

      • 如果 nums[i] 与 0 不同且 s 与 -1 相同,则

      • 否则当 nums[i] 等于 0 且 s 不等于 -1 时,则

      • 如果 s 与 -1 不同且 e 与 -1 相同,则

        • e := nums 的大小 -1

        • ans := ans 的最大值和 util(s, e)

      • 返回答案

      让我们看下面的实现来更好地理解:

      示例

      def util(s, e):
         neg = 0
         ns, ne = -1, -1
         for i in range(s, e+1):
            if nums[i]<0:
               neg += 1
               if ns == -1:
                  ns = i
               ne = i
      
         if neg == 0 or neg %2 == 0:
            return e-s+1
         else:
            return max(e-ns, ne-s)
      
      def solve(nums):
         ans = 0
         s, e = -1, -1
      
         for i in range(len(nums)):
            if nums[i]!=0 and s == -1:
               s = i
            elif nums[i]==0 and s != -1:
               e = i-1
               ans = max(ans, util(s, e))
               s = -1
               e = -1
      
         if s!= -1 and e == -1:
            e = len(nums)-1
            ans = max(ans, util(s, e))
            return ans
      
      nums = [2,-2,-4,5,-3]
      print(solve(nums))

      输入

      [2,-2,-4,5,-3]
      输出结果
      4