K 連續位的最小翻轉次數

2022-03-05 14:58:40 字數 1012 閱讀 7692

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

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

具體思路是貪心,就是從左邊開始,碰到不符合的就直接進行翻轉操作,最後檢查一下整個陣列是不是全為1的;然而這個樣tle了,最麻煩的時候複雜度可能會接近o(n*k)。

1

class

solution 11}

12if(!flag)ans = -1;13

else

20}21}

22for(int i = 0 ; i< len ; i++)24}

25 ans=num;26}

27return

ans;28}

29 };

然後具體優化,我們其實可以把裡面的長度為k的for迴圈給優化掉、這裡可以運用差分的思想;每一次操作是在乙個長度為k的區間進行的,所以當發現當前的位置0時,我們這個時候把這個點翻轉一下,然後再把這個點往後k個點的位置標記一下,證明這個時候是需要再

翻轉過來的(每一次標記相當於給這塊區間翻轉);然後具體判斷是否需要翻轉的時候,需要討論一下情況;當當前位置翻轉的次數為奇數的時候,這個點為1,也就是或翻轉過後為偶數,這個時候是需要翻轉的,也就是兩個都為1 1。當當前位置翻轉的次數為偶數的時候,這個點為0,這個時候也是需要翻轉的;所以綜合一下就是當  當前位置的翻轉次數==當前位置時什麼數 這個時候,是需要翻轉的。

1

class

solution 17}

18return

num;19}

20 };

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。解題思路一,因為0和1翻轉只有兩種情況,那麼我們可...

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

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