题目
题目来源
给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。
你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。
返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。
思路
按照评论中的思路:每天能拿到的收益为max(前一天能得到的收益,当天收益-前几天的最小值)
相关思考
一开始试图使用递归,然而由于无法快捷地获取前n天中的最小值,导致未能编写成功。从评论中归纳动态规划问题最重要的三点
1.初始条件的设置
2.转移方程(化大问题为小问题)
3.特殊size的处理
代码(C++)
class Solution {
public:
int maxProfit(vector<int>& prices) {
int length=prices.size();
if(length==1) return 0;
int minnum=min(prices[0],prices[1]);
int profits=max(prices[1]-prices[0],0);
for(int i=2;i<prices.size();i++)
{
profits=max(profits,prices[i]-minnum);
if(prices[i]<minnum) minnum=prices[i];
}
return profits;
}
};