动态规划解决买卖股票一二

news/2024/6/1 22:58:28 标签: 动态规划, 算法

买卖股票一:只能一次购买 一次卖出

dp[i][0]:第i天不持有股票的最大利润
dp[i][1]:第i天持有股票的最大利润 dp[i][0]
第i天不持有分为两种情况:
1.i-1天就不持有 dp[i-1][0]
2.i-1天持有i天卖掉 dp[i-1][1]+prices[i]
dp[i][1]:第i天持有股票的最大利润
1.i-1天就持有 dp[i-1][1]
因为只能够买一次 ,i天购入为-prices[i] ,而不是dp[i-1][0]-prices[i]

初始化 dp[0][0]=0,dp[0][1]=-prices[0]
public int maxProfit(int[] prices) {
    int len = prices.length;
    int[][] dp=new int[len][2];

     if (len < 2) {
        return 0;
    }

    dp[0][0]=0;
    dp[0][1]=-prices[0];

    for(int i=1;i<len;i++)
    {
        dp[i][0]=Math.max(dp[i-1][0],dp[i-1][1]+prices[i]);
        dp[i][1]=Math.max(dp[i-1][1],-prices[i]);
    }

    return dp[len-1][0];

}

买卖股票一:可以多次购买,一次只能持有一张股票

dp[i][0]:第i天不持有股票的最大利润
dp[i][1]:第i天持有股票的最大利润 dp[i][0]
第i天不持有分为两种情况:
1.i-1天就不持有 dp[i-1][0]
2.i-1天持有i天卖掉 dp[i-1][1]+prices[i]
dp[i][1]:第i天持有股票的最大利润
1.i-1天就持有 dp[i-1][1]
因为可以多次购买,i天购入为dp[i-1][0]-prices[i] 区别

初始化 dp[0][0]=0,dp[0][1]=-prices[0]
public int maxProfit(int[] prices) {
    int len = prices.length;
    int[][] dp=new int[len][2];

     if (len < 2) {
        return 0;
    }

    dp[0][0]=0;
    dp[0][1]=-prices[0];

    for(int i=1;i<len;i++)
    {
        dp[i][0]=Math.max(dp[i-1][0],dp[i-1][1]+prices[i]);
        dp[i][1]=Math.max(dp[i-1][1],dp[i-1][0]-prices[i]);
    }

    return dp[len-1][0];

}

http://www.niftyadmin.cn/n/347814.html

相关文章

linux管道通信原理

管道&#xff0c;通常指无名管道&#xff0c;是 UNIX 系统IPC&#xff08;InterProcess Communication)最古老的形式。 1、特点: 1.它是半双工的(即数据只能在一个方向上流动) &#xff0c;具有固定的读端和写端 2.它只能用于具有亲缘关系的进程之间的通信(也是子进程或者兄弟进…

今天面试招了个23K的人,从腾讯出来的果然都有两把刷子···

公司前段时间缺人&#xff0c;也面了不少测试&#xff0c;前面一开始瞄准的就是中级的水准&#xff0c;也没指望来大牛&#xff0c;提供的薪资在15-25k&#xff0c;面试的人很多&#xff0c;但平均水平很让人失望。看简历很多都是4年工作经验&#xff0c;但面试中&#xff0c;不…

C++17完整导引-模板特性之折叠表达式

折叠表达式 动机使用处理空参数包支持的运算符折叠函数调用组合哈希函数折叠基类的函数调用折叠路径遍历 使用折叠表达式处理类型 自从C17起&#xff0c;有一个新的特性可以计算对参数包中的 所有 参数应用一个二元运算符的结果。例如&#xff0c;下面的函数将会返回所有参数的…

基于C++的类UNIX文件系统

访问【WRITE-BUG数字空间】_[内附完整源码和文档] 一、题目要求 使用一个普通的大文件&#xff08;如 c:\myDisk.img &#xff0c;称之为一级文件&#xff09;模拟 UNIX V6的一个文件卷&#xff0c;一个文件卷实际上就是一张逻辑磁盘&#xff0c;磁盘中存储的信息以块为单位。…

快速上手MATLAB:科研、工程、数据分析,MATLAB入门(上)教你基础知识!+分享MATLAB完全学习手册资料(视频+课件+代码

快速上手MATLAB&#xff1a;科研、工程、数据分析&#xff0c;MATLAB入门&#xff08;上&#xff09;教你基础知识&#xff01; 福利&#xff1a;文末有资料分享&#xff01;&#xff01; 前言零基础的人学matlab&#xff0c;需要哪些基础知识&#xff1f; 一、认识MATLAB1. MA…

【SAM系列】CAN SAM COUNT ANYTHING? AN EMPIRICAL STUDY ON SAM COUNTING

论文链接&#xff1a;https://arxiv.org/abs/2304.10817 代码链接&#xff1a;https://github.com/vision-intelligence-and-robots-group/count-anything 目的 探索SAM在few-shot setting的object counting的能力。 结论 它目前落后于最先进的few-shot object counting方法…

STM32开发(二十一)添加代码静态检测详解 —— Cppcheck工具

👈《上一篇》  🏡《主目录》  👉《下一篇》 文章目录 ⭐️Cppcheck工具介绍🔧安装Cppcheck工具🏃 将工具添加到工程的Makefile中⭐️Cppcheck工具介绍 静态代码检查是指在不运行程序的条件下,进行程序分析的方法。 有些程序分析需要在程序运行时才能进行,这种程…

快速掌握Redis基础知识及使用技巧

Redis 是一个高性能、基于内存的键值数据库&#xff0c;其主要特点是支持多种数据结构和高并发读写操作。在本文中&#xff0c;我们将介绍 Redis 的基本概念和使用方法&#xff0c;以帮助读者快速入门 Redis。 Redis 的基本概念 Redis 是一种基于内存的高性能 key-value 存储系…