121. 买卖股票的最佳时机
图源:https://leetcode.cn/problems/best-time-to-buy-and-sell-stock/solution/by-jyd-cu90/
题目要求只能在某一天买入,在未来某一天卖出,我们用第i天的价值 减去 前i天最小价值,就可以得到若第i天卖出可以得到的最大利润
class Solution {
public:
int maxProfit(vector<int>& prices) {
int n = prices.size();
if(n < 2){
return 0;
}
int minPrice = prices[0];
vector<int> profit(n, 0);
int ans = 0;
for(int i = 1; i < n; i++){
minPrice = min(minPrice, prices[i]);
profit[i] = prices[i] - minPrice; // profit[i]:第i天卖出可以得到的最大利润
ans = max(ans, profit[i]);
}
return ans;
}
};
我们发现记录每天卖出可以获得的利润的数组profit可以优化
class Solution {
public:
int maxProfit(vector<int>& prices) {
if(prices.size() < 2){
return 0;
}
int minPrice = prices[0];
int ans = 0;
for(int i = 1; i < prices.size(); i++){
minPrice = min(minPrice, prices[i]);
ans = max(ans, prices[i] - minPrice);
}
return ans;
}
};
122. 买卖股票的最佳时机 II
题目的意思是,在任意一天都可以进行买和卖,也就是我每天都买股票,每天都当天卖出也是可以的。这就好说了,我们遍历数组后,把股票上涨阶段能获得的利润都进行保存,就能获得最大利润了
class Solution {
public:
int maxProfit(vector<int>& prices) {
int ans = 0;
for(int i = 1; i < prices.size(); i++){
if(prices[i] - prices[i-1] > 0){
ans += (prices[i] - prices[i-1]);
}
}
return ans;
}
};