题目描述
给定一个二进制数组和一个整数k,如果可以翻转最多k个0,则返回数组中连续1的最大个数。
解题思路
统计当前窗口0的个数,0的个数大于k时,滑动窗口左移,0的个数减1。滑动窗口连续1的个数为right-left+1。
#include <stdio.h>
#include <stdlib.h>
int getResult(int* nums,int len,int k){
int left=0;
int right=0;
int count=0;
int maxlen=0;
while(right<len){
if(nums[right]==0)
count++;
while(count>k){
if(nums[left]==0){
count--;
}
left++;
}
maxlen=fmax(maxlen,right-left+1);
right++;
}
return maxlen;
}
int main()
{
int nums[100];
int len=0;
while(scanf("%d",&nums[len++])){
if(getchar()!=' ')break;
}
int k;
scanf("%d",&k);
printf("%d",getResult(nums,len,k));
return 0;
}