在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