代码随想录Day49、50 | 121.买卖股票的最佳时机 | 122. 买卖股票的最佳时机 II | 123. 买卖股票的最佳时机 III | 188. 买卖股票的最佳时机 IV

121. 买卖股票的最佳时机

class Solution {
public:
    int maxProfit(vector& prices) {
        int f[prices.size()+1][2];
        f[0][0]=-prices[0];   //第二个为0,则持有股票。
        f[0][1]=0;      //第二个为1,则无股票
        for(int i=1;i

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

class Solution {
public:
    int maxProfit(vector& prices) {
        int n=prices.size();
        int f[n+1][2];
        f[0][0]=-prices[0];  //dp[x][0]:在x天持有股票的持有现金
        f[0][1]=0;           //dp[x][1]:在x天没有股票的持有现金
        for(int i=1;i

123. 买卖股票的最佳时机 III

        

class Solution {
public:
    int maxProfit(vector& prices) {
        int n = prices.size();
        if(n==0) return 0;
        vector> f(n+1,vector(4,0));
        f[0][0]=-prices[0]; //第一次持有股票
        f[0][2]=-prices[0]; //第二次持有股票
        for(int i=1;i

188. 买卖股票的最佳时机 IV   

class Solution {
public:
    int maxProfit(int k, vector& prices) {

        if (prices.size() == 0) return 0;
        vector> f(prices.size(), vector(2 * k + 1, 0));
        for (int j = 1; j < 2 * k; j += 2) {
            f[0][j] = -prices[0];
        }
        for (int i = 1;i < prices.size(); i++) {
            for (int j = 0; j < 2 * k - 1; j += 2) {
                f[i][j+1]=max(f[i-1][j+1],f[i-1][j]-prices[i]);
                f[i][j+2]=max(f[i-1][j+2],f[i-1][j+1]+prices[i]);
            }
        }
        return f[prices.size() - 1][2 * k];
    }
};

你可能感兴趣的:(算法题练习,算法)