/**
*
*
* @param {number[]} customers
* @param {number} boardingCost
* @param {number} runningCost
* @return {*} {number}
*/
function minOperationsMaxProfit(customers: number[], boardingCost: number, runningCost: number): number {
let currentMoney: number = 0, // 当前我有多少利润呢?
currentTime: number = 0, // 现在是第几轮?
maxMoney: number = 0, // 最大利润是多少?
maxMoneyTime: number = 0, // 最大利润出现在第几轮?
currentCustomer: number = 0; // 当前有几个人可以上车
do {
if (currentTime < customers.length) { // 防止越界
// 我先把可以上车的人数统计一下
currentCustomer += customers[currentTime];
}
// 在这一轮有多少人可以上车?
const capacity: number = Math.min(currentCustomer, 4);
// 这些人上车后,现在我的利润是多少?
currentMoney += capacity * boardingCost - runningCost;
// 刚才这么多人上车,应该更新一下目前可以上车的人数
currentCustomer -= capacity;
// 这一轮到这里就算结束了,轮数+1
++currentTime;
// 统计一下,截止到目前,最大的利润 && 最大利润所出现的轮数
if (maxMoney < currentMoney) {
maxMoney = currentMoney;
maxMoneyTime = currentTime;
}
// 循环维持的条件是: 有游客还在等车 或者 还有游客正在路上,还没到来
} while (currentCustomer > 0 || currentTime < customers.length);
return maxMoney > 0 ? maxMoneyTime : -1;
};