leetcode1052_爱生气的书店老板_滑动窗口

1. 这题其实最关键的是转换思路. 不生气时间段的人数和都是固定的, 所以题目的意思是让求连续X时间段内生气的人数和的最大值.

2. 可以运用滑动窗口.看窗口大小为X的窗口内,不生气的人数和的最大值是多少.

class Solution {
public:
    int maxSatisfied(vector<int>& customers, vector<int>& grumpy, int X) {
        int left=0,right=0;
        int ans1=0, ans2=0;
        int tmp=0;
        while(right<customers.size()) {
            //不生气的人数全部都要加上.
            if(grumpy[right]==0) ans1 += customers[right];
            //生气的人数由tmp计算.
            else tmp += customers[right];
            //当窗口大小不满足条件时,需要缩小窗口.
            if(right-left+1>X) {
                //只有当left值为1时,才需要将原先加上的值去掉.
                if(grumpy[left]==1) tmp -= customers[left];
                left++;    
            }
            right++;
            //找到每一个窗口的最大值,防止出现[3]这样一个值的情况,
            //不经过while循环.
            ans2 = max(tmp, ans2);
        }
        //最大值为不生气人数加上生气人数最大值.
        return ans1+ans2;
    }
};

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值