题目描述
给定一个由若干 0 和 1 组成的数组 A,我们最多可以将 K 个值从 0 变成 1 。
返回仅包含 1 的最长(连续)子数组的长度。
示例 1:
输入:A = [1,1,1,0,0,0,1,1,1,1,0], K = 2
输出:6
解释:
[1,1,1,0,0,1,1,1,1,1,1]
粗体数字从 0 翻转到 1,最长的子数组长度为 6。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/max-consecutive-ones-iii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
C++
class Solution {
public:
int longestOnes(vector<int>& A, int K) {
//这次以0为中心, 相邻最近的K个O附近有多少个1
vector<int> index; //记录0的位置
for(int i=0;i<A.size();i++){
if(A[i]==0){
index.push_back(i);
}
}
if(index.size()<=K){
return A.size();
}
//0的个数大于K
int res;
res=index[K]; //对于修改前K个0;
int j;
for( j=1;j<index.size()-K;j++){
res=max(res,index[K+j]-index[j-1]-1);
}
res=res >( A.size()-index[j-1]-1) ? res :( A.size()-index[j-1]-1);
return res;
}
};