本题采用尺取法。尺取法就是判断一个区间是否符合条件。通过两个指针来指定一个区间。
本题就是采用一个左指针(l)和一个右指针(r),来判断[l,r]中符合要求的区间。
t用于记录黑板的个数,若黑板的个数大于m了,左指针就往前移,减少黑板子的个数,每次都判断一个当前白板子的个数并记录下来,与之前的比较,保存其最大值。AC代码如下:
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param n int
* @param m int
* @param a intvector
* @return int
*/
int solve(int n, int m, vector<int>& a) {
// write code here
int r = 0,l = 0,ans = 0,temp = 0;
while(r < n){
if(a[r] == 0)temp++;
while(temp > m){
if(a[l] == 0)temp--;
l++;
}
ans = max(ans,r - l + 1);
r++;
}
return ans;
}
};
京公网安备 11010502036488号