chapter 3 爱生气的书店老板

在这里插入图片描述

法一

   int maxSatisfied(vector<int>& customers, vector<int>& grumpy, int X) {
        if(customers.size()==0)return 0;
        int k=0;
        vector<int> temp1(customers.size()-X+1,0),temp2(customers.size()-X+1,0);
        for(int i=0;i<customers.size();i++){
            k+=customers[i]*(1-grumpy[i]);//无技能满意度
        }
        for(int i=0;i<customers.size()-X+1;i++){
            for(int j=i;j<i+X;j++){
                temp1[i]+=customers[j];//每X位有技能满意度
                temp2[i]+=customers[j]*(1-grumpy[j]);//每X位无技能满意度
            }
            temp2[i]=temp1[i]-temp2[i];//保存差值
        }
        int max=temp2[0];
        for(int i=1;i<temp2.size();i++){
            if(temp2[i]>max)max=temp2[i];//取差值最大
        }
        return max+k;//相加
    }
};

法二(利用滑动窗口)

#laugh计算无技能时满意度
#angry列出不满意度
#通过滑动窗口思想以X为一组,每次移一位,+新位-旧位,选最大不满意度
#无技能时满意度+最大不满意读

class Solution {
public:
    int maxSatisfied(vector<int>& customers, vector<int>& grumpy, int X) {
        vector<int> angry(customers.size(),0),laugh(customers.size(),0); 
        int max=0,temp=0,sum=0;
        for(int i=0;i<customers.size();i++){
            angry[i] = customers[i]*grumpy[i];
            laugh[i] = customers[i]*(1-grumpy[i]);
            sum += laugh[i];
        }
        for(int i=0;i<X;i++){
            max+=angry[i];
        }
        temp = max;
        for(int i=X;j<customers.size();i++){
            temp += angry[i] - angry[i-X];//加新减旧
            if(temp>max)max = temp;
         }
         return sum+max;
    }
};
``
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值