数据结构-买卖青蛙最大利润

【题目来自灰灰考研】

青蛙题精选)你现在是一个买卖青蛙的 huster。每天的青蛙价格不一样,prices[i]代表青蛙在第 i 天的价 格,求只做一次交易(买入 1 只,卖出 1 只)能得到的最大收益(你必须先买了青蛙之后才能 卖青蛙)。 

时间复杂度要求:O(n) 

#include<iostream>
#include<stdlib.h>
#define MIN 0xc0c0c0c0
#define MAX 0x3f3f3f3f
using namespace std;


int MostProfit(int data[], int n)
{
	int minPrice = MAX;
	int maxProfit = MIN;
	for(int i = 0; i < n; i++)
	{
		/*
			从前向后扫描,假设就在扫描到的那一天进行出售
			则可以知道,要想利润最大,买的那一天一定是价格最低的,
			所以用当前天的出售的价格去减去当前最低价格就是当前最优解,
			如果这个解比上一步得到的结果更好则进行更新全局最优解 
		*/
		if(data[i] < minPrice)
		{
			minPrice = data[i];
		}
		if(data[i] - minPrice > maxProfit)
		{
			maxProfit = data[i] - minPrice;
		}
	}
	return maxProfit;
}


int main()
{
	int data[] = {4, 1, 2, 3};
	int maxProfit;
	maxProfit = MostProfit(data, 4);
	cout<<"最大利润为:"<<maxProfit<<endl;
	return 0;
} 

猜你喜欢

转载自blog.csdn.net/LiuKe369/article/details/81150480
今日推荐