Day49 |121. 买卖股票的最佳时机 |122. 买卖股票的最佳时机 II

121. 买卖股票的最佳时机

注意点:

  1. 本题是只能卖一次

  1. dp数组初始化的时候 dp[j][0]是j时候不持有的收益, dp[j][1]是j时候持有的收益

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int len = prices.size();
        vector<vector<int>> dp(len, vector<int>(2));
        dp[0][0] = 0;
        dp[0][1] = -prices[0];
        for(int j = 1; j < len; j++) {
            // dp[j][0]是j时候不持有,获得的利润是dp[j][0]
            // dp[j][1]是j的时候持有,获得的利润是dp[j][0]
            dp[j][0] = max(dp[j-1][0], dp[j-1][1]+prices[j]);
            dp[j][1] = max(dp[j-1][1], -prices[j]);
        }
        // 因为不持有的时候包含收益,dp[len-1][0]一定大于dp[len-1][0]
        return dp[len-1][0];
    }
};
122. 买卖股票的最佳时机 II

注意点:

1.和121. 买卖股票的最佳时机 非常相似,只不过是递归函数中的一小部分不太相同dp[j][1] = max(dp[j-1][1], dp[j][0]-prices[j]),主要是考虑了可以重复买卖的操作

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int len = prices.size(); 
        vector<vector<int>> dp(len, vector<int>(2));
        dp[0][0] = 0;
        dp[0][1] = -prices[0];
        for(int j = 1; j < len; j++) {
            // dp[j][0]是j时候不持有,获得的利润是dp[j][0]
            // dp[j][1]是j的时候持有,获得的利润是dp[j][0]
            dp[j][0] = max(dp[j-1][0], dp[j-1][1]+prices[j]);
            dp[j][1] = max(dp[j-1][1], dp[j][0]-prices[j]);
        }
        // 因为不持有的时候包含收益,dp[len-1][0]一定大于dp[len-1][0]
        return dp[len-1][0];
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值