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

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

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

所以,如果输入是 nums = [2,-2,-4,5,-3],那么输出将是 4,因为前四个元素形成的子数组的乘积为正。

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

  • 定义 util() 函数。这将使用 s, e 作为参数。
  • neg := 0
  • ns := -1,ne := -1
  • 对于范围在 s 到 e 的循环,执行以下操作。
    • 如果 nums[i] < 0,则
      • neg := neg + 1
      • 如果 ns 与 -1 相同,则
      • ns := i
      • ne := i
  • 如果 neg 是偶数,则
    • 返回 e-s+1
  • 否则,
    • 返回 e-ns 和 ne-s 的最大值
  • 从主方法中执行以下操作-
  • ans := 0
  • s := -1,e := -1
  • 对于范围在 0 到 nums 的大小的循环,执行以下操作。
    • 如果 nums[i] 不同于 0 并且 s 与 -1 相同,则
      • s := i
    • 否则,当 nums[i] 与 0 相同时,s 不同于 -1,则
      • e := i-1
      • ans :=ans 和 util(s, e) 的最大值
      • s := -1,e:= -1
  • 如果 s 不同于 -1 并且 e 与 -1 相同,则
    • e := nums 的大小 -1
    • ans :=ans 和 util(s, e) 的最大值
  • 返回 ans

以下是更好的理解的实现:

示例

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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程