首页 > 其他分享 >股票买卖模型

股票买卖模型

时间:2023-04-08 16:46:19浏览次数:42  
标签:股票买卖 股票 模型 样例 max prices 交易 dp

股票买卖模型

题目描述

给定一个长度为 \(N\) 的数组,数组中的第 \(i\) 个数字表示一个给定股票在第 \(i\) 天的价格。

如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。

注意你不能在买入股票前卖出股票。

输入格式

第一行包含整数 \(N\),表示数组长度。

第二行包含 \(N\) 个不大于 \(10^9\) 的正整数,表示完整的数组。

输出格式

输出一个整数,表示最大利润。

数据范围

$ 1 \le N \le 10^5 $,

输入样例1:

6
7 1 5 3 6 4

输出样例1:

5

输入样例2:

5
7 6 4 3 1

输出样例2:

0

样例解释

样例1:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。注意利润不能是 7-1 = 6, 因为你不能在买入股票前卖出股票。

样例2:在这种情况下, 不进行任何交易, 所以最大利润为 0。


算法

(DP)

使用一个dp[x][y][z]数组来表示某种情况下的收益情况
x表示是第x天,y表示当前已经经过了第几次交易(交易以买进卖出两个操作为一次)
z使用0或者1来表示当前是否持有股票。
当前第i天交易0次并持有股票的状态 是从i - 1的交易0次持有股票转化而来
或者是从i - 1交易0次未持有股票买进了当前的股票转化而来。
dp[i][0][1] = max(dp[i - 1][0][1], dp[i - 1][0][0] -prices[i]);

当前第i天交易1次并未持有股票的状态 是从i - 1交易1次未持有股票转化而来
或者是从i - 1交易1次持有股票以当天价格卖掉状态转化
dp[i][1][0] = max(dp[i - 1][1][0], dp[i - 1][0][1] + prices[i]);

时间复杂度

dont know

空间复杂度

dont know

C++ 代码

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int n = prices.size();
        if(n == 1) return 0;
        int f[n + 2][2][2];
        f[0][0][1] = -prices[0];
        f[0][0][0] = 0;
        f[0][1][1] = -1e4;
        f[0][1][0] = -1e4;

        for(int i = 1; i < n; i ++)
        {
            f[i][1][1] = -1e4;
            f[i][0][0] = f[i - 1][0][0];
            f[i][0][1] = max(f[i - 1][0][1], f[i - 1][0][0] - prices[i]);
            f[i][1][0] = max(f[i - 1][1][0], f[i - 1][0][1] + prices[i]);
        }
        return max(f[n - 1][1][0], 0);

    }
};

标签:股票买卖,股票,模型,样例,max,prices,交易,dp
From: https://www.cnblogs.com/bothgone/p/17298751.html

相关文章

  • 【路径规划】基于模型预测人工势场MPAPF求解考虑复杂遭遇场景的 COLREG船舶运动规划附
    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。......
  • 人工智能在线AI智能模型聊天AI网站系统源码
    demo软件园每日更新资源,请看到最后就能获取你想要的:​ 1.人工智能在线AI智能模型聊天AI网站系统源码 PHP网站系统源码 API接口源码AI网站系统源码仅23kb,实现用户管理,一键添加接口,一键修改接口,在线ai5个模型聊天,文转图,图转图,并且实现5个不同模式的API接口源码提供用户对......
  • 基于扩散过程的生成模型
    以下内容由GPT生成。不保证正确性。简单介绍以下是该领域(基于扩散过程的生成模型)的发展历史总结,其中包含了一些关键性论文:扩散过程最早可以追溯到20世纪的物理学和数学,它在随机过程和概率论方面具有悠久的历史。扩散过程模型是基于一种特殊的马尔可夫链,通常用于描述颗粒或......
  • 盒子模型常用属性
    盒⼦的位置和⼤⼩尺寸宽度width:⻓度|百分⽐|auto⾼度height边界marginpadding上右下左|上下左右padding与marginpadding:10px10px10px10px//上左下右padding:5px10px //上下边距5px、左右边距10pxpadding:5px10px20px//上边距左右边距下边距p......
  • CSS标准盒子模型与怪异盒子模型
    <style>*{margin:0;padding:0;}div{/*宽高改变的是内容大小*/width:200px;height:200px;}/*w3c标准盒子:盒子的总大小=内容+内边距+边框+外边距*//*只要改变内容,内边距,外边距,边框,盒子都......
  • Java内存模型
    Java内存模型的作用《Java虚拟机规范》中曾试图定义一种“Java内存模型”(JavaMemoryModel,JMM)来屏蔽各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的内存访问效果。在此之前,主流程序语言(如C和C++等)直接使用物理硬件和操作系统的内存模......
  • R语言EG(Engle-Granger)两步法协整检验、RESET、格兰杰因果检验、VAR模型分析CPI和PPI
    全文链接:http://tecdat.cn/?p=31108最近我们被客户要求撰写关于VAR模型的研究报告,包括一些图形和统计输出。作为衡量通货膨胀的基本指标,消费者价格指数CPI和生产者价格指数PPI的作用关系与传导机制一直是宏观经济研究的核心问题。对此问题的研究显然具有重要的学术价值与现实意......
  • R语言预测人口死亡率:用李·卡特(Lee-Carter)模型、非线性模型进行平滑估计|附代码数据
    全文链接:http://tecdat.cn/?p=26147最近我们被客户要求撰写关于预测人口死亡率的研究报告,包括一些图形和统计输出。今天早上,我和同事一起分析死亡率。我们在研究人口数据集,可以观察到很多波动性我们得到这样的结果:  由于我们缺少一些数据,因此我们想使用一些广义非线性模......
  • 经济学:动态模型平均(DMA)、动态模型选择(DMS)、ARIMA、TVP预测原油时间序列价格|附代
    全文链接:http://tecdat.cn/?p=22458最近我们被客户要求撰写关于动态模型平均的研究报告,包括一些图形和统计输出。本文提供了一个经济案例。着重于原油市场的例子。简要地提供了在经济学中使用模型平均和贝叶斯方法的论据,使用了动态模型平均法(DMA),并与ARIMA、TVP等方法进行比较简......
  • R语言GARCH族模型:正态分布、t、GED分布EGARCH、TGARCH的VaR分析股票指数|附代码数据
    全文链接:http://tecdat.cn/?p=31023最近我们被客户要求撰写关于GARCH的研究报告,包括一些图形和统计输出。如何构建合适的模型以恰当的方法对风险进行测量是当前金融研究领域的一个热门话题VaR方法作为当前业内比较流行的测量金融风险的方法,具有简洁,明了的特点,而且相对于方差......