Skip to content

Latest commit

 

History

History
52 lines (40 loc) · 1.75 KB

1599. 经营摩天轮的最大利润.md

File metadata and controls

52 lines (40 loc) · 1.75 KB
  • 贪心算法
/**
 *
 * 
 * @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;

};