2024-1-1
文章目录
- [1599. 经营摩天轮的最大利润](https://leetcode.cn/problems/maximum-profit-of-operating-a-centennial-wheel/)
- 思路:
1599. 经营摩天轮的最大利润
思路:
1.对摩天轮的运转情况进行模拟,
2.遍历数组,分别计算每次的当前利润、最大利润、上一轮遗留的人数
3.循环的条件为:数组没走完 、数组走完了,还剩等待的游客两种情况都进入循环
4.计算当前轮次的人 :
-
情况一(数组没走完): 第i轮之前到达地游客数量customers[i] + 上一轮留下的人lostCustomers
-
情况二(数组走完了,还剩等待的游客):当前轮次的人== 留下的人
5.如果当前轮次人数大于4,遗留的人数为= 当前轮次人数减4
- 当前的利润为每轮四个人的票钱 - 一次运行成本,利润累加
6.如果当前轮次人数小于4,剩下的人都乘坐,当前利润为这批不满4人乘客的票钱 - 一次运行成本
7.利润比较,如果当前轮利润更大,轮次加一
public int minOperationsMaxProfit(int[] customers, int boardingCost, int runningCost) {
// 最小运行次数,即答案
int minTimes = -1;
// 最大利润
int maxMoney = 0;
// 当前利润
int curMoney = 0;
// 上一轮遗留下来的人
int lostCustomers = 0;
// 当还有剩下人,或者i没遍历完,开始遍历
for (int i = 0; i < customers.length || lostCustomers > 0; i++) {
// 计算当前轮次的人
int curCustomers;
if (i < customers.length){
curCustomers = lostCustomers + customers[i];
}else {
curCustomers = lostCustomers;
}
// 大于4,则最多上车四个;否则则有几个上车几个
if ( curCustomers > 4){
lostCustomers = curCustomers - 4;
curMoney += 4 * boardingCost - runningCost;
}else {
lostCustomers = 0;
curMoney += curCustomers * boardingCost - runningCost;
}
// 如果当前轮次的利润大于备案的最大利润,则更新轮次和最大利润
if (curMoney > maxMoney){
minTimes = i + 1;
maxMoney = curMoney;
}
}
return minTimes;
}
点击移步博客主页,欢迎光临~