【代码随想录】day50

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


一、123买卖股票的最佳时机III

超时了。。。

class Solution {
public:
    int helper(vector<int>& prices, int start, int end) {
        int profit = 0;
        int buyPrice = prices[start];
        for (int i = start + 1; i < end; i ++) {
            profit = max(profit, prices[i] - buyPrice);
            buyPrice = min(buyPrice, prices[i]);
        }
        return profit;
    }

    int maxProfit(vector<int>& prices) {
        int result = 0;
        for (int i = 1; i < prices.size(); i ++) {
            if (prices[i] <= prices[i-1]) {
                continue;
            }
            result = max(result, helper(prices, 0, i) + helper(prices, i - 1, prices.size()));
        }
        return result;
    }
};

二维dp:

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        vector<vector<int>> dp(prices.size(), vector<int>(5, 0));
        dp[0][1] = -prices[0];
        dp[0][3] = -prices[0];
        for (int i = 1; i < prices.size(); i ++) {
            dp[i][1] = max(dp[i-1][1], dp[i-1][0] - prices[i]);
            dp[i][2] = max(dp[i-1][2], dp[i-1][1] + prices[i]);
            dp[i][3] = max(dp[i-1][3], dp[i-1][2] - prices[i]);
            dp[i][4] = max(dp[i-1][4], dp[i-1][3] + prices[i]);
        }
        // for (auto vec: dp) {
        //     for (int num: vec) cout << num << " ";
        //     cout << endl;
        // }
        return dp[prices.size()-1][4];
    }
};

二、188买卖股票的最佳时机IV

上一道题举一反三即可,但上一道题的二维dp真滴想不到呀。。

class Solution {
public:
    int maxProfit(int k, vector<int>& prices) {
        vector<vector<int>> dp(prices.size(), vector<int>(1 + 2 * k, 0));
        for (int i = 1; i < dp[0].size(); i += 2) {
            dp[0][i] = -prices[0];
        }
        for (int i = 1; i < prices.size(); i ++) {
            for (int j = 1; j < dp[0].size(); j ++) {
                if (j % 2 == 1) {
                    dp[i][j] = max(dp[i-1][j], dp[i-1][j-1] - prices[i]);
                }
                else {
                    dp[i][j] = max(dp[i-1][j], dp[i-1][j-1] + prices[i]);
                }
            }
        }

        // for (auto vec: dp) {
        //     for (int num: vec) cout << num << " ";
        //     cout << endl;
        // }
        return dp[prices.size() - 1][2 * k];
    }
};

相关推荐

  1. 代码随想day50

    2024-05-04 13:28:02       34 阅读
  2. 代码随想day52

    2024-05-04 13:28:02       34 阅读
  3. 代码随想day55

    2024-05-04 13:28:02       28 阅读
  4. 代码随想day58

    2024-05-04 13:28:02       26 阅读
  5. 代码随想Day59

    2024-05-04 13:28:02       28 阅读
  6. 代码随想算法训练营day50

    2024-05-04 13:28:02       36 阅读
  7. 代码随想学习 54day 图论 from代码随想

    2024-05-04 13:28:02       24 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-04 13:28:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-04 13:28:02       101 阅读
  3. 在Django里面运行非项目文件

    2024-05-04 13:28:02       82 阅读
  4. Python语言-面向对象

    2024-05-04 13:28:02       91 阅读

热门阅读

  1. Redis rehash 相关问题

    2024-05-04 13:28:02       35 阅读
  2. File 文件搜索,啤酒问题,删除非空文件夹

    2024-05-04 13:28:02       32 阅读
  3. db2常用命令大全(高级篇)

    2024-05-04 13:28:02       32 阅读
  4. 机车 - 教你学摩托车

    2024-05-04 13:28:02       27 阅读
  5. Linux之sed命令(包含MacOS使用方法)

    2024-05-04 13:28:02       37 阅读
  6. Centos 启动jar包的详细步骤

    2024-05-04 13:28:02       32 阅读
  7. nginx在CentOS系统安装

    2024-05-04 13:28:02       35 阅读
  8. VM Ubuntu unknown filesystem

    2024-05-04 13:28:02       35 阅读
  9. 综合案例(账号密码登录和SQL注入)

    2024-05-04 13:28:02       29 阅读