題解 力扣995 K 連續位的最小翻轉次數

2022-06-22 19:30:10 字數 972 閱讀 5734

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

差分思想

用差分思想來計算當前數字需要翻轉的次數。開乙個差分陣列\(diff[a.length+1]\)來維護,多開1位,減少溢位判斷

a的翻轉次數為差分陣列\(d[i]\)的累加和

當需要翻轉時,只改變了\(diff[i]\)和\(diff[i+k]\)的值。故\(diff[i]\)增加1,\(diff[i+k]\)減少1.

對於乙個數若其經歷了奇數次翻轉,則其改變,若經歷了偶數次翻轉則其值未變,即

class solution 

ans++;

revcnt++;

diff[i+k]--;}}

return ans;}}

滑動視窗

使用佇列來模擬滑動視窗,該滑動視窗的含義是前面\(k-1\)個元素中,以哪些位置其實的 子區間 進行了翻轉。從左向右滑動,如果當前位置\(i\)需要翻轉,則吧該位置儲存到佇列中。遍歷到新位置\(j(j時,佇列中元素的個數代表了\(j\)被前面\(k-1\)個元素翻轉的次數。

所以結論que.size() % 2 == a[i]時,當前元素需要翻轉。

當\(i+k>n\)時,說明需要翻轉大小為\(k\) 的子區間,但是後面剩餘的元素不到 \(k\)個了,所以返回 -1。

class solution 

//1.本來是1,翻轉奇數次變為0,所以需要再次翻轉,放入佇列

//2.本來是0,翻轉偶數次還是0,所以需要再次翻轉,放入佇列

if (que.size() % 2 == a[i])

}return res;}}

官方題解.995k 連續位的最小翻轉次數

負學明燭

三十三

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 解釋 ...