力扣第40天----第121题、第122题

力扣第40天----第121题、第122题

文章目录

一、第121题--买卖股票的最佳时机

​ 分2种情况考虑,根据持有股票、不持有股票这2种情况,完成递推公式。另外,这里要求只买卖一次,所以买入的前一个状态一定是手里现金为0。

c++ 复制代码
class Solution {
public:
    int maxProfit(vector<int>& prices) {    //0表示不持有, 1表示持有
        vector<vector<int>> dp(2, vector<int>(prices.size(), 0));
        dp[0][0] = 0;
        dp[1][0] = -prices[0];
        for(int i =1; i<prices.size(); ++i){
            dp[0][i] = max(dp[0][i-1], dp[1][i-1] + prices[i]);
            dp[1][i] = max( - prices[i], dp[1][i-1] );  //这里控制,只买卖一次。如果是别的值(不是0),就是买卖多次。
        }
        return dp[0][prices.size() - 1];
    }
};

二、第122题--买卖股票的最佳时机II

​ 跟上一题,基本一样。可以买卖多次,那么买入的前一个状态,手里可以有现金,要根据前一个状态手里现金数,再做处理。

c++ 复制代码
class Solution {
public:
    int maxProfit(vector<int>& prices) {    //0表示不持有, 1表示持有
        vector<vector<int>> dp(2, vector<int>(prices.size(), 0));
        dp[0][0] = 0;
        dp[1][0] = -prices[0];
        for(int i =1; i<prices.size(); ++i){
            dp[0][i] = max(dp[0][i-1], dp[1][i-1] + prices[i]);
            dp[1][i] = max(dp[0][i-1] - prices[i], dp[1][i-1] );
        }
        return dp[0][prices.size() - 1];
    }
};
相关推荐
2501_931803756 分钟前
线性筛(欧拉筛):从原理到应用
算法
酉鬼女又兒8 分钟前
零基础入门计算机网络:MAC地址、IP地址与ARP协议全面解析(含考研真题详解)
网络·网络协议·tcp/ip·计算机网络·考研·macos·职场和发展
ysu_031410 分钟前
leetcode数据结构与算法5~7:链表双指针与二级指针
数据结构·学习·算法·leetcode·链表
小欣加油14 分钟前
leetcode542 01矩阵
数据结构·c++·算法·leetcode·矩阵·bfs
wu_ye_m26 分钟前
学习c语言第34天 用函数每次输出+1,链式访问,int和void
c语言·学习·算法
Felomeng32 分钟前
从旧博客出发,向新的世界走去
程序人生·职场和发展
星马梦缘37 分钟前
算法设计与分析 作业三 答案与解析
算法·线性规划·二分图匹配·多元最短路·流网络·bellmanford·匈牙利树算法
微风欲寻竹影39 分钟前
Java数据结构——二叉树(Binary Tree)详解
java·数据结构·算法
想吃火锅100540 分钟前
【leetcode】3.无重复字符的最长字串js版
算法·leetcode·职场和发展
smith成长之旅43 分钟前
08 | Mem0 框架分析: BM25 的 Sigmoid 归一化
数据库·python·算法