避免每日太過鹹魚,一天搞定一道leetcode演算法題難度:困難在僅包含 0 和 1 的陣列 a 中,一次 k 位翻轉包括選擇乙個長度為 k 的(連續)子陣列,同時將子陣列中的每個 0 更改為 1,而每個 1 更改為 0。
返回所需的 k 位翻轉的最小次數,以便陣列沒有值為 0 的元素。如果不可能,返回 -1。
示例 1:
輸入:a =[0
,1,0
], k =
1輸出:2
解釋:先翻轉 a[
0],然後翻轉 a[
2]。
示例 2:
輸入:a =[1
,1,0
], k =
2輸出:-
1解釋:無論我們怎樣翻轉大小為 2 的子陣列,我們都不能使陣列變為 [1,
1,1]。
示例 3:
輸入: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大小的視窗去滑動,遇到視窗第乙個為0的就對整個視窗進行翻轉,然後繼續滑動。
**
class
solution
//翻轉
reversal
(a, left, right)
; count++;}
}// 如果為-1 全為1 不需要反轉 直接返回 0
if(left ==-1
)return count;
}/**
* 反轉的方法
--------------也希望大家給我點支援,謝謝各位大佬了!!!--------------
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 解釋 ...