天津品牌网站建设哪个好,免费设计装修公司,济南建站联系企汇优,有哪些做任务网站在仅包含 0 和 1 的数组 A 中#xff0c;一次 K 位翻转包括选择一个长度为 K 的#xff08;连续#xff09;子数组#xff0c;同时将子数组中的每个 0 更改为 1#xff0c;而每个 1 更改为 0。
返回所需的 K 位翻转的最小次数#xff0c;以便数组没有值为 0 的元素。如果…在仅包含 0 和 1 的数组 A 中一次 K 位翻转包括选择一个长度为 K 的连续子数组同时将子数组中的每个 0 更改为 1而每个 1 更改为 0。
返回所需的 K 位翻转的最小次数以便数组没有值为 0 的元素。如果不可能返回 -1。
示例 1
输入A [0,1,0], K 1 输出2 解释先翻转 A[0]然后翻转 A[2]。
解题思路
贪心思路遍历每个0元素对其进行翻转使用队列维护翻转的子数组的首位下标
代码
class Solution {public int minKBitFlips(int[] A, int K) {int res0;LinkedListInteger queuenew LinkedList();for (int i 0; i A.length; i) {if(!queue.isEmpty()i-K1queue.getFirst())
//当前位置不在队头翻转的子数组范围内所以移除队头元素queue.removeFirst();
//剩余队列中的元素个数代表当前位置被多少个已经翻转的子数组覆盖即当前位置的翻转次数偶数次翻转是本身奇数次翻转是相反数以此判定当前位置的元素是否为0if(queue.size()%2A[i]){if(iKA.length) return -1;//不能恰好被k长度子数组覆盖res;queue.addLast(i);}}return res;}
}