力扣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;}};