AcWing
  • 首页
  • 题库
  • 题解
  • 分享
  • 问答
  • 活动
  • 应用
  • 吐槽
  • 登录/注册

LeetCode 1052. 爱生气的书店老板 (贪心)    原题链接    中等

作者: 作者的头像   GRID ,  2021-02-23 20:14:45 ,  阅读 18


0


分析

把老板生气时的下标加入到队列q中,把不生气的所有值加起来。
枚举q中每个元素,计算以q[i]为首个下标,长度为X的数组的总和,如果得到的值比ans大,就更新ans。
最后返回ans。

C++ 代码

class Solution {
public:
    int ans,hh,tt=-1;
    int maxSatisfied(vector<int>& customers, vector<int>& grumpy, int X) {
        int n=customers.size();
        int q[n+1];
        for(int i=0;i<n;i++)
        {
            if(!grumpy[i])      //老板不生气,计算总和
                ans+=customers[i];
            else    
                q[++tt]=i;      //老板生气,下标加入队列q
        }
        int res=ans;
        while(hh<=tt)       //枚举q中每个元素
        {
            auto t=q[hh++];
            int temp=0;
            for(int i=t,j=0;(i<n && j<X);i++,j++)   //计算以q[i]为首下标,长度为X的数组和
            {
                if(grumpy[i])   //加上老板生气时的顾客数
                    temp+=customers[i];
            }
            if(res+temp>ans)    //更新答案
                ans=res+temp;
        }
        return ans;
    }
};

0 评论

你确定删除吗?

© 2018-2021 AcWing 版权所有  |  京ICP备17053197号-1
联系我们  |  常见问题
AcWing
请输入登录信息
更多登录方式: 微信图标 qq图标
请输入绑定的邮箱地址
请输入注册信息