动态规划–股票(一次买入卖出和两次买入卖出)(c++)

##一次买入卖出
如果用一个数组代表股票每天的价格,可以选择从某一天买入,然后之后的一天卖出,求能够获得的最大收益。
例如,一只股票在某些时间节点的价格为{9,11,8,5,7,12,16,14}。在价格为5的时候买入并在价格为16时卖出,则能获得最大的利润为11.

思路:动态规划----整个问题总是依赖于子问题,只要把子问题解决了,问题就解决了。
这题的实质就是找长度为n的数组下最大差值是多少。

当数组a下标为i时,记录当前最小值MIN和最大差值D_MIN,然后当数组下标为i+1时,当前数组长度下的最小值就是MIN=min(MIN,a[i+1]),而当前数组下的最大差值就是D_MIN=max(D_MIN,a[i+1]-MIN)。所以只需遍历数组一遍,便可以知道长度为n的数组下最大差值是多少。

时间复杂度0(n)
代码如下:


#include <iostream>
#include<algorithm>
using namespace std;class Solution {public:int maxProfit(int prices[], int length) {//数组长度为1时的最小值和最大差值int MIN = prices[0];int D_MAX = 0;//数组长度为i+1时的最小值和最大差值for (int i = 1; i < length; i++) {D_MAX = max(prices[i] - MIN, D_MAX);//如果prices[i]比 MIN还小,那么它绝不可能超过i-1数组下的 D_MAXMIN = min(prices[i], MIN);}return D_MAX;}
};int main()
{int a[] = { 9,11,8,5,7,12,16,14 };Solution b;cout<<"最大收益等于"<<b.maxProfit(a, 8)<<endl;system("pause");return 0;
}

##两次买入卖出
如果用一个数组代表股票每天的价格,两次买入卖出,且买入后,再没卖出前是不能买股票的。也就是说,下一次的买入卖出,必须要在上一次卖出后才能进行。
例如,一只股票在某些时间节点的价格为{2,5,3,9,15,2 }。第一次,在价格为2的时候买入并在价格为5时卖出,第二次,在价格3时买入,价格15时卖出,则能获得最大的利润为(5-2)+(15-3)=15.

思路:分段考虑
以i为分界线,前i天的最大和i天后面的最大,分两段进行每次的一个交易;两段的最大和,则为最大的利润;


#include <iostream>
#include<algorithm>
using namespace std;class Solution {public:int maxProfit(int prices[], int length) {//数组长度为1时的最小值和最大差值int partion=0;//分界点,分成数组分成 prices[0]~prices[partion] 和 prices[partion+1]~prices[ length-1]int D_MAX = 0;//返回值//数组长度为i+1时的最小值和最大差值for (partion; partion < length; partion++) {int MIN_l = prices[0];int D_MAX_l = 0;int MIN_r = prices[partion + 1];int D_MAX_r = 0;//这四个初始化一定要放在循环内,因为他们是跟着partion变化的。for (int i =0; i <= partion; i++) {D_MAX_l = max(prices[i] - MIN_l, D_MAX_l);//如果prices[i]比 MIN还小,那么它绝不可能超过i-1数组下的 D_MAXMIN_l = min(prices[i], MIN_l);}for (int j = partion + 1; j <= length - 1;j++) {D_MAX_r = max(prices[j] - MIN_r, D_MAX_r);//如果prices[i]比 MIN还小,那么它绝不可能超过i-1数组下的 D_MAXMIN_r= min(prices[j], MIN_r);}D_MAX = max(D_MAX, (D_MAX_l + D_MAX_r));}return D_MAX;}
};int main()
{int a[] = { 2,5,3,9,15,2 };Solution b;cout<<"最大收益等于"<<b.maxProfit(a, 6)<<endl;system("pause");return 0;
}

##多次买入卖出
参考 :https://blog.csdn.net/qiannuo_/article/details/84062976

动态规划--股票(一次买入卖出和两次买入卖出)相关推荐

  1. 买股票的最佳时机(一次买入一次卖出,两次,多次)

    一次买入和一次卖出的情况 解法一: class Solution:def maxProfit(self, prices: List[int]) -> int:miniprice = float( ...

  2. 期权买入开仓如何实现?买入开仓和卖出开仓是什么意思?

    在QR社区中,小编看到最近出现了一些关于开仓买卖的一些问题,小编心里很是好奇,所以去搜集了一些相关的内容,以此来给小编扫扫盲点. (一)期权买入开仓 1. 如何计算认购期权买入开仓的成本和到期日损益? ...

  3. 委托交易怎么卖出开仓?买入开仓和卖出开仓要注意些什么?

    很多不满足当前工作收入的朋友,都有想增加选择一份其他行业的工作的时候,有些人会考虑股指期货.从QR社区我们可以知道在我们操作股指期货的时候,常常能听到两个名词"开仓平仓",是期货交 ...

  4. 动态规划——股票问题

    动态规划专题--股票问题 虽然前两题用贪心可以做,但是本篇文章全部使用动态规划来解决问题,比较具有体系. 121. 买卖股票的最佳时机 动规五部曲:  第一步:确定dp数组(dp table)以及下标 ...

  5. kdj超卖_KDJ买入形态:D线进入超卖区间

    KDJ买入形态:D线进入超卖区间 人次阅读 #打印 实例:东旭光电股价在2013年4月26日KDJ指标中的D线跌破20位进入超卖区间.于5月9日D线突破20位置,说明空方极度强势的行情已经结束,股价开 ...

  6. 18.一个人赶着鸭子去每个村庄卖,每经过一个村子卖去所赶鸭子的一半又一只。这样他经过了七个村子后还剩两只鸭子,问他出发时共赶多少只鸭子?经过每个村子卖出多少只鸭子?

    18.一个人赶着鸭子去每个村庄卖,每经过一个村子卖去所赶鸭子的一半又一只.这样他经过了七个村子后还剩两只鸭子,问他出发时共赶多少只鸭子?经过每个村子卖出多少只鸭子? #include <stdi ...

  7. 一个人赶着鸭子去每个村庄卖,每经过一个 村子卖去所赶鸭子的一半又//一只。 这样他经过了 七个村子后还剩 两只鸭子,问问他出发时共赶多少//只鸭子?经过每个村子卖出多少只鸭子?

    .一个人赶着鸭子去每个村庄卖,每经过一个 村子卖去所赶鸭子的一半又 //一只. 这样他经过了 七个村子后还剩 两只鸭子,问问他出发时共赶多少 //只鸭子?经过每个村子卖出多少只鸭子?int i,j=2 ...

  8. 程序员花了14个小时找出了长春长生们究竟卖到了哪里去

    程序员花了14个小时找出了长春长生们究竟卖到了哪里去  01前言 全文的观点从技术讨论出发,尽量客观中立,观点及行为为员工自发,不代表本人所在公司及团队. 需要说明的是这次数据是涵盖所有的疫苗数据,并 ...

  9. 欧拉与鸡蛋 大数学家欧拉在集市上遇到了本村的两个农妇,每人跨着个空篮子。 她们和欧拉打招呼说两人刚刚卖完了所有的鸡蛋。

    /*欧拉与鸡蛋 大数学家欧拉在集市上遇到了本村的两个农妇,每人跨着个空篮子. 她们和欧拉打招呼说两人刚刚卖完了所有的鸡蛋. 欧拉随便问:"卖了多少鸡蛋呢?" 不料一个说:" ...

最新文章

  1. 重磅丨李飞飞亲自带队,谷歌AI中国中心今天正式成立
  2. python十分钟教程_简洁的十分钟Python入门教程
  3. 使用Azure Application Insignhts监控ASP.NET Core应用程序
  4. 【Tensorflow】Tensorflow中的卷积函数(conv2d、slim.conv2d、depthwise_conv2d、conv2d_transpose)
  5. Linux内存管理之基本概念介绍(一)
  6. 月入10w+的offer,变成了整容、传销、网红届的韭菜
  7. malloc()与 alloc()区别(转)
  8. 贪心算法 (Greedy Algorithm)
  9. python中求众数_Python实现求众数的三种方法
  10. 非线性动力学_非线性随机动力学团队2019大事件回顾
  11. scrapy+selenium之中国裁判文书网文书爬取
  12. Android Q+ 新特性 Settings Panel
  13. 解决你的R语言乱码问题
  14. 揭秘seo快排原理,seo快排流量
  15. linux硬盘的两个分区合并_linux多个分区合并为一个分区
  16. 笔记本电脑外放声音吱吱响怎么办?
  17. Javascript 执行上下文(ES3)
  18. 后端框架之Flask--初识
  19. English总结(一)-- 常用语句篇
  20. java毕业设计翻转课堂微视频管理系统Mybatis+系统+数据库+调试部署

热门文章

  1. 盐务街属于一环吗_贵阳一环范围地图
  2. GAN——对抗生成网络
  3. 小麦盒子cdn_高恪论坛 - Powered by Discuz!
  4. PDA应用于同城配送管理解决方案
  5. 08、CSS3过渡以及动画
  6. 《Python3网络爬虫开发实战》学习笔记_P2
  7. 炫丽的朋友圈视频滚动播放功能
  8. 浅析代码圈复杂度及认知复杂度
  9. 个人免签支付云端监听免挂机支付宝收款
  10. 禁止网站开启F12 禁止调试代码方法