题目浅析

  • 想查看原题可以点击题目链接

  • 简单地说,就是给两个整型数组,以及一个整数 minutes,按某个要求(具体看原题,难以简化),求一个数组在另一个数组和 minutes 约束下的求的最大值。

思路分享

  • 陆爻齐的思路是计算窗口内(也就是冷静的分钟)不满意生气离开的最大值,加上不生气的心情值,再减去所有生气离开的数值得出答案,但由于思想复杂了点,所以略微修改模板结构,也就是下面陆爻齐的答案。
  • 参照灵茶山艾府,其实只要区分开两部分相加即可,然后直接参照模板。这两部分,一个是不生气的值,一个是生气下的值,取生气下最大值即可。这样就不用像上面一样多一次运算。

    https://leetcode.cn/problems/grumpy-bookstore-owner/solutions/2751888/ding-chang-hua-dong-chuang-kou-fu-ti-dan-rch7/

代码解答(强烈建议自行解答后再看)

  • 陆爻齐的解法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class Solution {
public:
int maxSatisfied(vector<int>& customers, vector<int>& grumpy, int minutes) {
int mental_sum = 0;
int max_mental_sum = 0;
int all_angry = 0;
int all_mental = reduce(customers.begin(), customers.end());

for (int i = 0; i < customers.size(); i++) {
cout << mental_sum << endl;
if (grumpy[i]) {
mental_sum += customers[i];
all_angry += customers[i];
}

if (mental_sum > max_mental_sum) {
max_mental_sum = mental_sum;
}
if (i < minutes - 1) continue;
if (grumpy[i-minutes+1]) mental_sum -= customers[i-minutes+1];
}

return all_mental - all_angry + max_mental_sum;
}
};