【題目來自灰灰考研】
(青蛙題精選)你現在是一個買賣青蛙的 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;
}