使用 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 := 一个新的列表

  • cnt := 0

  • 对于 nums 中的每个 i,执行以下操作:

    • 如果 i 等于 0,则

      • 如果 cnt 不等于 0,则

        • 将 cnt 插入到 a 的末尾

        • cnt := 0

      • 将 i 插入到 a 的末尾

      • 否则,

        • cnt := cnt + 1

  • 如果 cnt 不等于 0,则

    • 将 cnt 插入到 a 的末尾

  • Max := 0

  • 对于从 0 到 a 的大小的范围内的 i,执行以下操作:

    • 如果 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]) 中的最大值

  • 返回 Max

示例

 现场演示

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

更新于: 2021年5月29日

355 次查看

启动你的 职业生涯

通过完成课程获得认证

开始
广告

© . All rights reserved.