力扣995.K连续位的最小翻转次数
-
因为翻转顺序改变不影响最终结果
- 因此从头找每个位置翻转后的结果
- 如果为0 将从它开始的K长的数组翻转
-
class Solution {public:int minKBitFlips(vector<int>& nums, int k) {int n = nums.size();vector<int> s(n+1);int res=0,cnt=0;for(int i=0;i<n;i++){cnt += s[i]; // 差分记录每个位置的翻转次数if((nums[i] + cnt) % 2 == 0) //需要翻转{if(i + k > n) return -1; //i + k - 1 == n时不足k位res ++;cnt ++; //相当于s[i] ++;s[i+k] --; //s[i+k-1+1] --;}}return res;}};