/*
f[k][j]表示到j天为止进行了k次交易,产生的最大利润
f[k][j]=max{f[k][j-1],price[j]-price[i]+f[k-1][i]} 0=<i<=j-1
=max{f[k][j-1],price[j]+max{f[k-1][i]-price[i]}}
*/
class Solution {
public:
int maxProfit(vector<int>& prices) {
if(prices.size()<=1)//天数<=1 无法进行交易
return 0;
int maxk=2;
int tempmax;
vector<vector<int>> f(maxk+1,vector<int>(prices.size()+1,0));
for(int k=1;k<=maxk;k++)
{
tempmax=f[k-1][0]-prices[0];
for(int j=1;j<prices.size();j++)
{
f[k][j]=max(f[k][j-1],prices[j]+tempmax);
tempmax=max(tempmax,f[k-1][j]-prices[j]);
}
}
return f[2][prices.size()-1];
}
};
123. Best Time to Buy and Sell Stock III
最新推荐文章于 2021-01-31 22:53:22 发布