题意:用一个数组代表股票走势图,第i个元素表示第i天股票的价格。求一次交易(买进一次并卖出一次)的最大利润。
思路:采用扫描算法,扫描的过程中纪录最低价格。每到一个峰顶,计算一次最大利润。结束的时候再计算一次最大利润
代码:
int maxProfit(vector<int> &prices) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
int size=prices.size();
int result=0;
if (size==0)
return 0;
int minPoint=0;
int min=prices[0];
bool direction=true;
int current=prices[0];
for (int i=1;i<size;i++)
{
if (direction)
{
if (prices[i]<current)
{
if (current-min>result)
result=current-min;
direction=false;
}
}
else
{
if (prices[i]>current)
{
if (current<min)
{
minPoint=i-1;
min=current;
}
direction=true;
}
}
current=prices[i];
}
if (current-min>result)
result=current-min;
return result;
}