題意理解
給定一個整數 n 和一個整數 p,分別表示一個長度為 n 且除了索引為 p 處是 1 之外,其他所有數都是 0 的陣列 arr;同時給定一個由整數組成的陣列 banned 表示陣列中的限制位置。可以對陣列 arr 進行以下操作:如果單個 1 不在 banned 所標示的位置上,反轉大小為 k 的子陣列。
舉例來說:
n = 4, p = 0, banned = [1, 2], k = 4這一條件表示初始的陣列為 [1, 0, 0, 0],接著逐個索引討論:
- 索引值為
0時,原始陣列中該位置已為1,因此所需最少操作次數為0。 - 索引值為
1時,屬於banned中禁止操作的數字,因此無法調整為指定目標,所需操作次數為-1。 - 索引值為
2時,屬於banned中禁止操作的數字,因此無法調整為指定目標,所需操作次數為-1。 - 索引值為
3時,翻轉大小為4的子陣列,可以得到[0, 0, 0, 1],因此所需操作次數為 `1`。
綜合上述,返回結果為 [0, -1, -1, 1]。
解法一:Breadth-First Search
假設字串 s 的長度為 且其中共有 個 '0' 和 個 '1',假設在進行操作時可以翻轉 個 '0' 和 個 '1'。考慮翻轉一次後的情況:
- 翻轉後的
'0'共有 個。 - 翻轉後的
'1'共有 個。