【LeetCode每日一题】1599. 经营摩天轮的最大利润(模拟)—2024新年快乐!

2024-1-1

文章目录

    • [1599. 经营摩天轮的最大利润](https://leetcode.cn/problems/maximum-profit-of-operating-a-centennial-wheel/)
            • 思路:

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

【LeetCode每日一题】1599. 经营摩天轮的最大利润(模拟)—2024新年快乐!_第1张图片
【LeetCode每日一题】1599. 经营摩天轮的最大利润(模拟)—2024新年快乐!_第2张图片

思路:

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;
    }

点击移步博客主页,欢迎光临~

偷cyk的图

你可能感兴趣的:(LeetCode,leetcode,算法,职场和发展)