【题目来自灰灰考研】
(青蛙题精选)你现在是一个买卖青蛙的 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;
}