leetcode —— 1004. 最大連續1的個數 III

遠方與你發表於2020-11-04

給定一個由若干 0 和 1 組成的陣列 A,我們最多可以將 K 個值從 0 變成 1 。

返回僅包含 1 的最長(連續)子陣列的長度。

示例 1:

輸入:A = [1,1,1,0,0,0,1,1,1,1,0], K = 2
輸出:6
解釋:
[1,1,1,0,0,1,1,1,1,1,1]
粗體數字從 0 翻轉到 1,最長的子陣列長度為 6。

示例 2:

輸入:A = [0,0,1,1,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1], K = 3
輸出:10
解釋:
[0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1]
粗體數字從 0 翻轉到 1,最長的子陣列長度為 10。

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/max-consecutive-ones-iii
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。
————————————————
Python3:

class Solution:
    def longestOnes(self, A, K):
        left, right = 0, 0
        count = 0
        for right in range(len(A)): #遍歷陣列
            if A[right] == 0:       #如果新加元素為0,count加1
                count += 1
            if count > K:           #如果count大於K,說明超出了限制,需要判斷
                if A[left] == 0:    #如果左側數為0,則減小count,增加右側,如果為1,則count不變,保持為最大視窗
                    count -= 1
                left += 1           #不管左側元素為0或1,視窗都要後移
        return right - left + 1     #遍歷結束返回視窗大小

題目是找最長的1的序列長度,當count的值小於k時,序列能不斷延伸,當right遍歷到的值為1時序列也能不斷延伸;

只有當right遍歷的值為0同時count的值大於k時才會使left增加,這時候如果left對應的值為0時則count減一,否則直接left+1,count不變;

相關文章