使用Python删除一个元素后查找最长1s子数组的程序

假设我们有一个名为 nums 的二进制数组,我们可以从中删除一个元素。我们必须找到在结果数组中只包含 1 的最长非空子数组的大小。如果没有这样的子数组,则返回 0。

因此,如果输入类似于 nums = [1,0,1,1,1,0,1,1,0],那么输出将是 5,因为通过从位置 5 中删除 0,我们可以得到一个子数组 [1 ,1,1,1,1] 有五个 1。

示例

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