day113(3.15)——leetcode面试经典150

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

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

题目:

题解:

java 复制代码
class Solution {
    // 可以买卖多次,但手里只能持有一股。
    // 最多可以完成 两笔 交易。
    // 因为可以多次买卖,所以"买入"的时候,可以用"上一次卖出赚的钱"来抵扣成本。
    public int maxProfit(int[] prices) {
        //如果当前股票的数量<2,直接就是不持有股票,利润为0
        if(prices==null||prices.length<2) {
            return 0;
        }
        int n = prices.length;
        int[][] dp = new int[n][4];
        //创建二维数组
        //int[i][0]: 第1次卖入后的最大收益
        //表示第i天没有股票,(可能之前有,但就在第i天卖掉了,也可能之前就没有,所以第i天也不买)
        dp[0][0]=0;
        //int[i][1]: 第1次买入后的最大收益
        //表示第i天有股票,(可能之前有,但第i天也不买,也可能之前就没有,所以第i天就买了)
        dp[0][1]=-prices[0];
        // dp[i][2]: 第2次卖入后的最大收益
        //表示第i天没有股票,买了->卖了->又买->卖了
        dp[0][2]=0;
        // dp[i][3]: 第2次买出后的最大收益
        //表示第i天有股票,买了->卖了->又买
        dp[0][3]=-prices[0];
        //遍历每一天的股票数
        for(int i=1;i<n;i++) {
            //dp[i][0]状态:要么之前卖的,要么今天卖(用第一次买入的状态 + 今天价格)
            dp[i][0] = Math.max(prices[i]+dp[i-1][1], dp[i-1][0]);
            //dp[i][1]状态:要么之前买的,要么今天刚买(初始资金0)
            dp[i][1] = Math.max(dp[i-1][1], -prices[i]);
            //dp[i][2]状态:要么之前卖的,要么今天卖(用第二次买入的状态 + 今天价格)
            dp[i][2] = Math.max(prices[i]+dp[i-1][3], dp[i-1][2]);
            //dp[i][3]状态:要么之前买的,要么今天刚买(用第一次卖出的利润 - 今天价格)
            dp[i][3] = Math.max(dp[i-1][0]-prices[i], dp[i-1][3]);
        }
        //一定是没有股票的时候能得到最大利润,如果当前有股票,那一定是亏钱的,且肯定是进行完了第二次交易后最大
        return dp[n-1][2];
    }
}
相关推荐
KaMeidebaby7 小时前
卡梅德生物技术快报|抗体亲和力成熟工业化调控新机制:差异性浆细胞增殖工艺优化思路
java·开发语言·人工智能·算法·机器学习·架构·spark
luj_17687 小时前
心形曲线轨迹控制三大关键技术
c语言·开发语言·c++·经验分享·算法
tmlx3I0817 小时前
高光谱拼接算法(六)RANSAC 误匹配剔除
人工智能·算法·机器学习
不相心 -w-8 小时前
基础-滑动窗口-(定长 | 不定长)
算法
醉城夜风~8 小时前
Java详解经典算法题:接雨水(三种实现方案+原理剖析)
java·开发语言·算法
ysa0510308 小时前
【板子】ST表
c++·笔记·算法·板子
CHHH_HHH9 小时前
【C++11】深入解析C++可变参数模板
开发语言·c++·算法·stl·c++11
hurrycry_小亦9 小时前
洛谷题目:P1215 [USACO1.4] 母亲的牛奶 Mother‘s Milk 题解(本题简)
算法
KJ_BioMed10 小时前
从PDB到高亲和力分子:De novo生成式计算化学Pipeline剖析
算法·生物医药·生物科研·科研干货·化合物设计
一个王同学10 小时前
从零到一 | CV转多模态大模型 | week17 | LLM 推理优化 & vLLM 详解
人工智能·深度学习·算法·机器学习·计算机视觉·vllm