本题采用尺取法。尺取法就是判断一个区间是否符合条件。通过两个指针来指定一个区间。
本题就是采用一个左指针(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; } };