Leetcode 955 K連續位的最小翻轉次數

2022-01-19 09:31:30 字數 914 閱讀 2999

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

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

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

輸出:2

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

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

輸出:-1

解釋:無論我們怎樣翻轉大小為 2 的子陣列,我們都不能使陣列變為 [1,1,1]。

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

輸出:3

解釋:翻轉 a[0],a[1],a[2]: a變成 [1,1,1,1,0,1,1,0]

翻轉 a[4],a[5],a[6]: a變成 [1,1,1,1,1,0,0,0]

翻轉 a[5],a[6],a[7]: a變成 [1,1,1,1,1,1,1,1]

採用滑動視窗方法,使用佇列模擬滑動視窗,該滑動視窗的含義是指佇列前k-1元素中,哪個元素對子區間進行了翻轉。滑動視窗從左向右,如果當前位置i翻轉,則將i放入佇列中。遍歷到新位置j(j由上可知,如果 queue.size()%2==a[i],則當前元素需要翻轉,且當i+k>n時,表示無論如何翻轉都不可能為1 。

#include using namespace std;

class solution

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

q.push(i);

res++;}}

return res;

}};

K 連續位的最小翻轉次數

在僅包含 0 和 1 的陣列 a 中,一次 k 位翻轉包括選擇乙個長度為 k 的 連續 子陣列,同時將子陣列中的每個 0 更改為 1,而每個 1 更改為 0。返回所需的 k 位翻轉的次數,以便陣列沒有值為 0 的元素。如果不可能,返回 1。具體思路是貪心,就是從左邊開始,碰到不符合的就直接進行翻轉操...

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翻轉只有兩種情況,那麼我們可...