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;}
点击移步博客主页,欢迎光临~