Try Again

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;
    }
};
posted @ 2021-10-29 18:39  十年换你一句好久不见  阅读(39)  评论(0编辑  收藏  举报