使用Python查找删除一个元素后仅包含1的最长子数组的程序
假设我们有一个名为nums的二进制数组,我们可以从中删除一个元素。 我们必须找到仅包含1的最长非空子数组在结果数组中。 如果没有这样的子数组,则返回0。
因此,如果输入为nums = [1,0,1,1,1,0,1,1,0],则输出将为5,因为通过从位置5删除0,我们可以得到一个子数组[1,1,1,1,1],其中有五个1。
为了解决这个问题,我们将按照以下步骤进行 –
- 如果nums中没有0,则
- 返回nums的大小减1
- 如果nums中没有1,则
- 返回0
- a: =a新列表
-
cnt:= 0
-
对于nums中的每个i,执行以下操作 –
- 如果i与0相同,则
- 如果cnt与0不相同,则
-
在a的末尾插入cnt
-
cnt:= 0
-
在a的末尾插入i
-
否则,
-
cnt:= cnt +1
- 如果i与0相同,则
-
如果cnt与0不同,则
- 在a的末尾插入cnt
- 最大值:= 0
-
对于i在范围0到a的大小中,执行以下操作 –
- 如果a[i]与0不相同,则
- 转到下一个迭代
- 如果a[i]与0相同,并且i与a的大小相同-1,则
- Max:= Max和a[i-1]的最大值
- 否则,当a[i]与0相同并且i与0相同时,则
- Max:= Max和a[i+1]的最大值
- 否则,当a[i]与0相同时,则
- Max:= Max和(a[i+1] + a[i-1])的最大值
- 如果a[i]与0不相同,则
- 返回Max
更多Python相关文章,请阅读:Python 教程
示例
def solve(nums):
if 0 not in nums:
return len(nums)-1
if 1 not in nums:
return 0
a = []
cnt = 0
for i in nums:
if i == 0:
if cnt != 0:
a.append(cnt)
cnt = 0
a.append(i)
else:
cnt += 1
if cnt!=0:
a.append(cnt)
Max = 0
for i in range(len(a)):
if a[i] != 0:
continue
if a[i] == 0 and i == len(a)-1:
Max = max(Max,a[i-1])
elif a[i] == 0 and i == 0:
Max = max(Max,a[i+1])
elif a[i] == 0:
Max = max(Max,a[i+1]+a[i-1])
return Max
nums = [1,0,1,1,1,0,1,1,0]
print(solve(nums))
输入
[1,0,1,1,1,0,1,1,0]
输出
5