LeetCode 每日一题

image.png

思路

今天上午看了下题,当时有点懵,二了一下子没反应过来示例,晚上没事瞅了下,是我想复杂了,在睡觉前把今日一题补上🤡。
老规矩,区间求最值,想啥?套套滑动窗口/双指针。一瞅好像确实是那么回事。对头,还是滑动窗口或者双指针的老套路。
针对此情况,首当其冲需要解决 的是啥?
当然是左指针、右指针移动的条件。
晚上写了下 一步到位,bugfree 说明还是有点小窃喜,慢慢的形成自己的解题模板思路。

代码

class Solution {
    public int maxSatisfied(int[] customers, int[] grumpy, int X) {
        int len = customers.length, res = 0, max = 0, cur = 0;
        // 这里为啥这么处理呢?主要是满意的客户在初始情况下是一定的,我们只要找到X窗口中 最大值进行累加就是最终结果了。
        for(int i=0;i<len;i++){
            res += grumpy[i] == 0 ? customers[i] : 0;
        }
        int left = 0, right = left;
        //  ---------- 分割线 ------------
        // 其实以下部分就是滑动窗口或者双指针的框架模板结合 具体逻辑的代码
        while(right<len){
            right = left;
            while(right-left<X){
                cur += grumpy[right] == 1 ? customers[right] : 0;
                right++;
            }
            max = Math.max(max,cur);
            cur = 0;
            left++;
        }
        // -------- 分割线 ------------
        return res+max;
    }
}

关于作者

Kirago
扯淡第一名
获得点赞
文章被阅读