在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