差点又写成暴力了,来一个minn记录当天之前的最小值即可,记得更新minn,minn初始化prices[0]
class Solution {
public:
int maxProfit(vector<int>& prices) {
//最优解=dp
//dp[i]记录从这一天买入后,后面哪天卖出自己赚的最多,如果往后就是暴力了
//所以dp[i]是今天卖出所能最多赚到的钱,用一个minn记录前面的最小值,如果最小值都大于今天的,就是0
int minn = prices[0];
int res = 0;
for(int i = 1; i < prices.size(); ++i){
res = max(res,prices[i]-minn);
minn = min(minn,prices[i]);
}
return res;
}
};
二刷,记录当天之间的最小值即可。
class Solution {
public:
int maxProfit(vector<int>& prices) {
//暴力就是记录当前元素之前最小的元素是多少
//dp[i]记录的是前i天,不包括自身的买股票的最低价格
//因为只要记录最小值,所以一个数字即可
int minn = INT_MAX;
int res = 0;
for(int i = 0; i < prices.size(); ++i){
res = max(res,prices[i]-minn);
minn = min(prices[i],minn);
}
return res;
}
};
三刷,记录当前天之前的最小值即可,用当前减去前面的最小值,看看能否更新res。用完minn之后看看当前天能否更新minn
class Solution {
public:
int maxProfit(vector<int>& prices) {
//dp,dp[i]记录的是以当天卖出最多能赚多少钱
if(prices.size()<=1) return 0;
//和dp没关系,来一个记录最小的,用当天减去最小看看能否更新res即可
int res = 0;
int minn = INT_MAX;
for(int i = 0; i < prices.size(); ++i){
res = max(prices[i]-minn,res);
minn = min(prices[i],minn);
}
return res;
}
};