双指针:滑动窗口

lc 2379 得到k个黑色快的最少operate

说实话,滑动窗口还是见少了,知道有这个东西,一直没总结,刚看到题,自己还是很懵逼的,以为是dp,但是是简单题,都说用滑动窗口做,才有思路

大概思路如下图,滑动窗口每次都是双指针,来固定大小,当left++时right也++,使得窗口大小保持固定

直到right移动到数组最大长度位

代码

class Solution {
public:
    int minimumRecolors(string blocks, int k) {
        //滑动窗口找窗口白色数目最少
        int left = 0, right = k - 1;
        int op = 0;
        for (int i = 0; i < k; i++) {
            if (blocks[i] == 'W') {
                op++;
            }
        }
        int ans = op;
        left += 1;
        right += 1;
        for (int i = left; i < blocks.size() - k + 1; i++, right++) {
            if (blocks[i - 1] == 'W') op--;//看左边减少的数目
            if (blocks[right] == 'W') op++;//看移动时右边增加的数目
            ans = min(ans, op); 
        }
        return ans;
    }
};
posted @ 2023-03-09 09:15  壹剑霜寒十四州  阅读(29)  评论(0编辑  收藏  举报