leetcode 995. Minimum Number of K Consecutive Bit Flips
题意:给你一个只有0,1的一维数组,和一个数K。每次将连续的K个数做一次操作,将0变成1,将2变成0。问最少多少次,使得序列全为1,不行的话,返回-1.
思路:从左往右遍历,如果这个数为0,肯定要变成1,将后面的K个数(包含这个数)做一次操作。
最后看是否所有数都为1,不是的话,返回-1。
具体看代码。
虽然不知道怎么证明这个想法对的,但我觉得这道题不能算hard。
class Solution {
public:
int minKBitFlips(vector<int>& A, int K) {
int n = A.size();
int ans = 0;
for (int i = 0; i<n; i++)
{
if (A[i] == 0 && i + K<=n)
{
ans++;
for (int j = 0; j<K; j++)
A[i + j] = 1-A[i+j];
}
}
for (int i = 0; i<n; i++)
if (A[i] == 0)
return -1;
return ans;
}
};