给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。
如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。
注意你不能在买入股票前卖出股票。
·动态规划求解·
emm,这个和最大子序列和的思路有点像
找到状态转移方程:maxc= max(maxc, prices[i] - minvalue)
,maxc
为前i天的最大收益,minvalue
为前i天的最小值。
初始化状态量:res = 0
,minvalue = INT_MAX
代码如下:
class Solution {
public:
int maxProfit(vector<int>& prices)
{
int maxc = 0;
int minvalue = INT_MAX;
for (int i = 0; i < prices.size(); i++)
{
minvalue = min(minvalue, prices[i]);
maxc = max(maxc, prices[i] - minvalue);
}
return maxc;
}
}
执行用时:16ms,24.96%