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

使用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

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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程