使用 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
廣告
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP