算法训练营day52

题目1:123. 买卖股票的最佳时机 III - 力扣(LeetCode)

复制代码
class Solution {
public:
    int maxProfit(vector<int>& prices) {
        vector<vector<int>> dp(prices.size(), vector<int>(4,0));
        dp[0][0] = -prices[0];
        dp[0][1] = 0;
        dp[0][2] = -prices[0];
        dp[0][3] = 0;
        for(int i = 1;i < prices.size();i++) {
            dp[i][0] = max(dp[i - 1][0], -prices[i]);
            dp[i][1] = max(dp[i - 1][0] + prices[i], dp[i - 1][1]);
            dp[i][2] = max(dp[i - 1][1] - prices[i], dp[i - 1][2]);
            dp[i][3] = max(dp[i - 1][3], dp[i - 1][2] + prices[i]);
        }
        return dp[prices.size() - 1][3];
    }
};

题目2:188. 买卖股票的最佳时机 IV - 力扣(LeetCode)

复制代码
class Solution {
public:
    int maxProfit(int k, vector<int>& prices) {
        vector<vector<int>> dp(prices.size(), vector<int>(2 * k, 0));
        for(int j = 0;j < 2 * k;j+=2) {
            dp[0][j] = -prices[0];
            dp[0][j + 1] = 0;
        }
        for(int i = 1;i < prices.size();i++) {
            dp[i][0] = max(dp[i - 1][0], -prices[i]);
            for(int j = 1;j < 2 * k - 1;j+=2) {
                dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - 1] + prices[i]);
                dp[i][j + 1] = max(dp[i - 1][j + 1], dp[i - 1][j] - prices[i]);
            }
            dp[i][2 * k - 1] = max(dp[i - 1][2 * k - 1], dp[i - 1][2 *k - 2] + prices[i]);
        }
        return dp[prices.size() - 1][2 * k - 1];
    }
};
相关推荐
EndingCoder7 分钟前
算法与前端的可访问性
前端·算法·递归·树形结构
ysa05103034 分钟前
竞赛常用加速技巧#模板
c++·笔记·算法
7 9737 分钟前
C语言基础知识--文件的顺序读写与随机读写
java·数据结构·算法
2401_8410039837 分钟前
Kubernetes 资源管理全解析
算法·贪心算法
☆璇2 小时前
【数据结构】排序
c语言·开发语言·数据结构·算法·排序算法
云和数据.ChenGuang3 小时前
gitlab-ci.yml
面试·职场和发展·gitee·运维面试题·运维技术总结
艾莉丝努力练剑5 小时前
【LeetCode&数据结构】单链表的应用——反转链表问题、链表的中间节点问题详解
c语言·开发语言·数据结构·学习·算法·leetcode·链表
_殊途6 小时前
《Java HashMap底层原理全解析(源码+性能+面试)》
java·数据结构·算法
珊瑚里的鱼9 小时前
LeetCode 692题解 | 前K个高频单词
开发语言·c++·算法·leetcode·职场和发展·学习方法
秋说10 小时前
【PTA数据结构 | C语言版】顺序队列的3个操作
c语言·数据结构·算法