class Solution {
public:
int maxProfit(vector<int>& prices) {
// 毫无疑问,肯定时最低点买入时利润最大
// 因为卖出点都是price[i],我买入时越低(低点在i之前),我的利润就越大
// 1. 确定dp数组及下标含义
// dp[i] 代表前i天的最大利润
// 2. 确定递推
// minPrice = min(minPrice, prices[i]); // 更新最低点
// dp[i] = max(dp[i-1], prices[i]-minPrice); // 昨天利润更高 or 在最低点买入并在第i天售出时利润更高
// 3. 确定初值
// minPrice = prices[0]
// dp[0] = 0 // 不买就不亏
// 4. 确定遍历
// for(int i=1; i<prices.size(); i++) <=0直接返回0
// 5. 举例
// [7, 1, 5, 3, 6, 4]
// i =0 , minPrice = 7 , dp[0] = 0
// i = 1, minPrice = 1 , dp[1] = 0
// i = 2, minPrice = 1, dp[2] = 4
// i = 3, minPrice = 1, dp[3] = 4
//...
int n = prices.size()-1;
if(n<=0)
return 0;
vector<int> dp(n+1);
int minPrice = prices[0];
dp[0] = 0;
for(int i = 1; i<=n; i++){
minPrice = min(minPrice, prices[i]);
dp[i] = max(dp[i-1], prices[i]-minPrice);
}
return dp[n];
}
};
剑指 Offer 63. 股票的最大利润
最新推荐文章于 2024-10-01 18:52:56 发布