题解
滑动窗口问题。
先计算未生气时间段的顾客总数,
然后使用长度为X的窗口从左向右滑动,
滑动过程中加上右侧生气损失的顾客,
减去左侧生气损失的顾客,
并记录最大值即可。
代码
/*** @param {number[]} customers* @param {number[]} grumpy* @param {number} X* @return {number}*/var maxSatisfied = function(customers, grumpy, X) {// 计算未生气时间段的顾客总数let sum = customers.reduce((prv, cur, idx) => grumpy[idx] ? prv : prv + cur, 0)let ret = 0for (let i = 0, prv; i < customers.length; i++) {prv = i - X// 加上右侧生气损失的顾客if (grumpy[i]) sum += customers[i]// 减去左侧生气损失的顾客if (prv >= 0 && grumpy[prv]) sum -= customers[prv]ret = Math.max(ret, sum)}return ret};
