leetcode955K连续位的最小反转次数

在仅包含 0 和 1 的数组 A 中,一次 K 位翻转包括选择一个长度为 K 的(连续)子数组,同时将子数组中的每个 0 更改为 1,而每个 1 更改为 0。

返回所需的 K 位翻转的最小次数,以便数组没有值为 0 的元素。如果不可能,返回 -1。

class Solution {
public:
    //差分数组.
    int minKBitFlips(vector<int>& nums, int k) {
        int n = nums.size();
        vector<int> dp(n + 1, 0);
        int ans = 0, cnt = 0;
        for(int i = 0; i < n; i++){
            ans ^= dp[i];
            if(ans ^ nums[i] == 0){
                if(i + k > n) return -1;
                cnt++; ans ^= 1; dp[i + k] ^= 1;
            }
        }
        return cnt;
    }
};
原文地址:https://www.cnblogs.com/shinianhuanniyijuhaojiubujian/p/15481835.html