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