暴力解法
测试用例巨大,以下代码悲惨超时:
class Solution {
public:
int maxProfit(vector<int>& prices)
{
int maxvalue = 0;
for (int i = 0; i < prices.size(); ++i)
{
for(int j = i + 1; j < prices.size(); ++j)
{
maxvalue = max(maxvalue, prices[j]-prices[i]);
}
}
return maxvalue;
}
};
动态规划
看了答案,有几个注意点:
第一,lowest初始值需要尽可能大,这里我写的是检验数据的最大值。
第二,整体思路为:从前到后遍历一遍,遍历每个点的时候都更新一遍当前的最小值和当前的利润,记录正在遍历的点之前能够取得的最大利润。
class Solution {
public:
int maxProfit(vector<int>& prices)
{
int lowest = 1e4, profit = 0;
for (int price : prices)
{
lowest = min(lowest, price);
profit = max(profit, price - lowest);
}
return profit;
}
};