力扣第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];
    }
};
相关推荐
小玮看世界8 分钟前
[Python]螺旋遍历 vs 最短路径:方向控制类算法的“同源异流”
开发语言·python·算法
月华路13 分钟前
《模型不玄学》第14章 标签、损失与样本权重
人工智能·算法·机器学习
黄金龙PLUS15 分钟前
SPARKLE置换算法的优缺点
算法·网络安全·密码学·哈希算法·同态加密
不会就选b15 分钟前
算法日常・每日刷题--<贪心>3
数据结构·算法·leetcode
学习星球18 分钟前
编辑距离——二维 DP 的“最小操作“艺术
c++·leetcode·java-consul
行者全栈架构师24 分钟前
WorkBuddy 实战:把一份 200 页年报变成可上台的投资分析 PPT
人工智能·算法·全栈
微三云生态系统架构师-彭丹37 分钟前
矩阵拼团系统设计:先付款先排队的订单排序与自动返本算法
线性代数·算法·矩阵
@MMiL1 小时前
基于Keil 的实时参数标定和值观测
算法
无限码力1 小时前
华为非AI方向笔试真题【工厂落点最小加权路程】
算法·华为·华为非ai方向笔试真题·华为笔试真题·华为最新笔试真题·华为笔试题库
residual_fan2 小时前
数据缺失填补算法之CUR-Estimator
算法·数据挖掘·数据分析