995 k連續位的最小翻轉次數

2021-10-21 03:05:17 字數 629 閱讀 3724

在僅包含 0 和 1 的陣列 a 中,一次 k 位翻轉包括選擇乙個長度為 k 的(連續)子陣列,同時將子陣列中的每個 0 更改為 1,而每個 1 更改為 0。

返回所需的 k 位翻轉的最小次數,以便陣列沒有值為 0 的元素。如果不可能,返回 -1。

示例

輸入:a = [0,1,0], k = 1

輸出:2

解釋:先翻轉 a[0],然後翻轉 a[2]。

提示

1 <= a.length <= 30000

1 <= k <= a.length

維持乙個大小為k的視窗,左指標為0就反轉並更新反轉次數,,最後判斷左指標到陣列末尾是否包含0,若包含返回-1,否則返回反轉次數(超時)如何優化?

對於每乙個大小為k的視窗,我們只需要判斷該視窗的第乙個元素是否為0,若為0就反轉,否則就不反轉

對於視窗內每乙個元素,記錄其之前的反轉次數總和,並結合當前元素判斷以該元素為首的視窗是否需要反轉

反轉次數為偶數情況下,元素不變,反轉次數為奇數情況下,更換該元素的值

參考**

class

solution

}return res;

}}

995 K 連續位的最小翻轉次數

題目描述 在僅包含 0 和 1 的陣列 a 中,一次 k 位翻轉包括選擇乙個長度為 k 的 連續 子陣列,同時將子陣列中的每個 0 更改為 1,而每個 1 更改為 0。返回所需的 k 位翻轉的次數,以便陣列沒有值為 0 的元素。如果不可能,返回 1。解題思路一,因為0和1翻轉只有兩種情況,那麼我們可...

995 K 連續位的最小翻轉次數

在僅包含 0 和 1 的陣列 a 中,一次 k 位翻轉包括選擇乙個長度為 k 的 連續 子陣列,同時將子陣列中的每個 0 更改為 1,而每個 1 更改為 0。返回所需的 k 位翻轉的最小次數,以便陣列沒有值為 0 的元素。如果不可能,返回 1。示例 1 輸入 a 0,1,0 k 1 輸出 2 解釋 ...

995 K 連續位的最小翻轉次數

在僅包含 0 和 1 的陣列 a 中,一次 k 位翻轉包括選擇乙個長度為 k 的 連續 子陣列,同時將子陣列中的每個 0 更改為 1,而每個 1 更改為 0。返回所需的 k 位翻轉的最小次數,以便陣列沒有值為 0 的元素。如果不可能,返回 1。示例 1 輸入 a 0,1,0 k 1 輸出 2 解釋 ...