【Leetcode】1599. 经营摩天轮的最大利润

文章目录

  • 题目
  • 思路
  • 代码

题目

1599. 经营摩天轮的最大利润题目链接
【Leetcode】1599. 经营摩天轮的最大利润_第1张图片
【Leetcode】1599. 经营摩天轮的最大利润_第2张图片
【Leetcode】1599. 经营摩天轮的最大利润_第3张图片

思路

这道题要求计算在一座摩天轮中最大化利润所需的最小轮转次数。有四个座舱,每个座舱最多容纳四位游客。摩天轮的运转需要支付一定的运行成本 runningCost,同时每位游客登舱需要支付登舱成本 boardingCost。摩天轮每次轮转恰好转动 1/4 周。

题目给出了一个 customers 数组,代表了在每次轮转之前到达的新游客数量。我们需要计算最小轮转次数,以便最大化利润。如果无法实现正利润,则返回 -1。

首先,代码遍历 customers 数组,计算累积的游客数量,并将多余的游客数量在下一轮进行处理。接着,根据累积的游客数量和每次轮转的成本计算每次轮转的利润,找到能够获得最大正利润的轮转次数。

为了求得最大正利润,代码需要对每次轮转的利润进行计算,并找到最大值。这是通过累积的游客数量乘以登舱成本减去运行成本的形式来实现的。找到最大正利润时,返回其对应的轮转次数索引。

这段代码主要进行了模拟和计算,其中对每次轮转利润的计算是重点,以获得最佳结果。

代码

class Solution {
public:
    int minOperationsMaxProfit(vector& customers, int boardingCost, int runningCost) {
        int y = 0;
        for(int i = 0;i < customers.size();i++)
        {
            customers[i] += y;
            if(customers[i] > 4)
            {
                y = customers[i] - 4;
                customers[i] = 4;
                continue;
            }
            else y = 0;
        }
        while(y != 0)
        {
            if(y >= 4)
            {
                customers.push_back(4);
                y -= 4;
            }
            else{
                customers.push_back(y);
                y = 0;
            }
        }
        int maxMoney = 0;
        int maxSum = 0;
        int idx = -1; 
        for(int i = 0;i < customers.size();i++)
        {
            maxSum += customers[i];
            int money = maxSum * boardingCost - (i + 1) * runningCost;
            if(money > 0 && money > maxMoney)
            {
                idx = i + 1;
                maxMoney = money;
            }
        }
        return idx;
    }
};

你可能感兴趣的:(练习题(记录做题想法),leetcode,算法,c++)