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

使用动态规划
d[i][0]表示在第i天交易结束后,不持有股票,分两种情况,1)前一天i-1天就不持有股票,2)前一天i-1天的时候持有股票,在第i天将股票卖出去了,收益增加prices[i]
d[i][1]表示在第i天交易结束后,持有股票,也分两种情况,1)前一天i-1天就持有股票,2)前一天i-1天的时候没有股票,在第i天买入了股票,收益减少prices[i]

初始状态为
d[0][0]=0表示第一天没有股票,即没买入股票,收益还是初始值为0;
d[0][1]=-prices[i]表示第一天有股票,即买入了股票,收益为-prices[i]

然后最终选择d[n-1][0]还是d[n-1][1],当然是手上不持有股票(即已经卖出)时,收益最大,即选择d[n-1][0]

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int n = prices.size();
        vector<vector<int>> d(n, vector<int>(2));
        d[0][0] = 0;
        d[0][1] = -prices[0];
        for (int i = 1; i < n; ++i) {
            d[i][0] = max(d[i - 1][0], d[i - 1][1] + prices[i]);
            d[i][1] = max(d[i - 1][1], d[i - 1][0] - prices[i]);
        }
        return d[n - 1][0];
    }
};

感觉难点就在于怎么设置d的状态。

你可能感兴趣的:(LeetCode,数据结构,算法,leetcode)