问题描述
思路
要遍历所有的情况,并且有重叠子问题,就可以考虑使用动态规划的思想来求解
1.首先就是确定dp[i]该表示什么,本题就按照题目意思来,表示第i天以前的最大利润
2.状态方程 本题为 dp[i]=max(dp[i−1],prices[i]−minprice),第i天要么什么都不做,要么在第i天卖出股票,所得的利润才可能是最大的
3.初始化 dp[0]=0;
代码
代码
class Solution {
public:
int maxProfit(vector<int>& prices) {
int n=prices.size();
if(n==0||n==1) return 0;
vector <int> dp(n,0);
int minp=prices[0];
for(int i=1;i<n;i++) {
minp=min(minp,prices[i]);
dp[i]=max(dp[i-1],prices[i]-minp);
}
return dp[n-1];
}
};