当前位置:首页 » 交易知识 » 股票交易动态规划
扩展阅读
中国股票怎么样的 2025-01-24 11:54:35
股票交易1万元费用多少 2025-01-24 10:14:26

股票交易动态规划

发布时间: 2023-04-12 12:23:33

1. 股票买卖有哪几种策略

第一种:不同情绪阶段有不同的操作特点和策略。对于投资者来说,买股票都是需要买主流人气股的,对于转折时低吸人气股的恐慌杀跌,买转势板。第二种:买股、选股的时候要做到:手中有股,心中无股。不要受手里现有的股票干扰,不能局限于自选股,要看当时整个市场资金选择的主流热点中的最强股。第三种:关于赔钱的交易分析。第四种:跟随。这个指的就是,不见买入信号不买入,投资者一定要跟随果断的买在启动点,因为敢于预判的资金都是有能力去引导,当预判偏离了预期的时候,可以四处点火去修正,所以在股市中的操作,就要看资金的动向,跟随市场资金是不会出错的。第五种:在新题材出现的第一天第一时间买入龙头或龙二。作为投资者来说要买进超预期的真正强的股票,打有溢价的板。在新题材出现的第一天,第一时间买入龙头或者龙二最安全,第二天往往高开,龙头甚至一字板涨停,第二天的溢价最高,而不是溢价兑现的板,板块高潮第二天买跟风股,就属于第一天涨停的溢价兑现。

2. 股市交易规则股票买入卖出规则

股票卖出是有时间限制的,股票可以买卖的时间是工作日(周一~周五)上午9:30~11:30,下午13:00~15:00,节假日以及交易所休假日除外,其他时间不能进行股票交易。在交易规定的时间内股票买卖还遵循T+1规则,也就是股票买入之后需要下一个工作日才可以卖出。
拓展资料:
股票交易
一字型:即开盘价、收盘价、最高价、最低价在同一价位。
可分为以下几种情况:
(1)涨停:开盘即以涨停价开出,至收盘为止,涨停未被打开过,全天均以最高价成交,说明买盘旺盛,该股属于强势股。
(2)跌停:开盘即以跌停价开出,至收盘为止,跌停未被打开过,全天均以最低价成交,说明卖盘沉重,该股属于弱势股。
(3)交易非常冷清,全日交易只有一档价位成交。
交易时间
周一至周五 (法定休假日除外)
上午9:30 --11:30 下午13:00 -- 15:00
竞价成交
(1) 竞价原则:价格优先、时间优先。价格较高的买进委托优先于价格较低买进委托,价格较低卖出委托优先于较高的卖出委托;同价位委托,则按时间顺序优先。
(2) 竞价方式:上午9:15--9:25进行集合竞价;上午9:30--11:30、下午13:00--15:00进行连续竞价 (对有效委托逐笔处理)。
交易单位
(1) 股票的交易单位为“股”,100股=1手,委托买入数量必须为100股或其整数倍;
(2) 基金的交易单位为“份”,100份=1手,委托买入数量必须为100份或其整数倍;
(3) 国债现券和可转换债券的交易单位为“手”,1000元面额=1手,委托买入数量必须为1手或其整数倍;
(4)当委托数量不能全部成交或分红送股时可能出现零股 (不足1手的为零股),零股只能委托卖出,不能委托买入零股。
交易帐户
新股民要做的第一件事就是为自己开立一个股票帐户(即股东卡)。股票帐户相当于一个“银行户头”,投资者只有开立了股票帐户才可进行证_买卖。
如要买卖在上海、深圳两地上市的股票,投资者需分别开设上海证_交易所股票帐户和深圳证_交易所股票帐户,开设上海、深圳A股股票帐户必须到证_登记公司或由其授权的开户代理点办理。
股票帐户有许多不同种类。个人投资者如需买卖沪、深股市的A股股票,则需开设A股股票帐户。

3. 动态规划经典案例

斐波那锲数列1,1,2,3,5,8,13,。。。
给N输出数列第N个数

上楼梯问题,一次只能上1 or 2;一个n阶的楼梯,有多少走法?

输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。例如
输入: nums = [-2,1,-3,4,-1,2,1,-5,4]
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。

假设把某股票的价格按照时间拆族携先后顺序存储在数组中,求买卖该股票一次可能获得的最大利润是多少?
例如:
输入: [7,1,5,3,6,4]
输出: 5
解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大旅伏利润 = 6-1 = 5 ;()利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格。

在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计穗肆算你最多能拿到多少价值的礼物?

总结:动态规划问题的核心在于定于dp函数,找个i和i-1之间的关系,可以有限降低算法的复杂度。

4. 如何建立自己的算法交易

一、传统方法

在某些假设下的显式最优策略

  • 【Bertsimas, Dimitris, and Andrew W. Lo. "Optimal control of execution costs."Journal of Financial Markets1.1 (1998): 1-50.】这里假设了不同的价格冲击函数,然后求解得到最优的交易执行方案。根据参数的不同,最优的策略要么是全部开头卖掉、均匀减仓、或者全部最后卖掉。https://stuff.mit.e/afs/athena.mit.e/user/d/b/dbertsim/www/papers/Finance/Optimal%20control%20of%20execution%20costs.pdf

  • 【Almgren, Robert, and Neil Chriss. "Optimal execution of portfolio transactions." Journal of Risk 3 (2001): 5-40. 】这篇文章我们专栏前面有讲过,很著名的 Almgren-Chriss 模型。https://www.smallake.kr/wp-content/uploads/2016/03/optliq.pdf张楚珩:【交易执行】Almgren-Chriss Model

  • 【Guéant O, Lehalle C A, Fernandez-Tapia J. Optimal portfolio liquidation with limit orders[J]. SIAM Journal on Financial Mathematics, 2012, 3(1):740-764.】这篇文章我们专栏前面也有讲过;前面的 Almgren-Chriss 其实考虑的是使用市价单,而这里考虑使用限价单进行交易。https://arxiv.org/pdf/1106.3279.pdf张楚珩:【交易执行】限价单交易执行

  • 【Guéant, Olivier, and Charles‐Albert Lehalle. "General intensity shapes in optimal liquidation." Mathematical Finance 25.3 (2015): 457-495.】这里也是考虑限价单进行交易,但是与前面不同的是:前一个假设限价单考虑的成交概率随着价格指数衰减,而这里考虑了一个更加一般的形式。https://arxiv.org/pdf/1204.0148.pdf

  • 【Cartea A, Jaimungal S. Optimal execution with limit and market orders[J]. Quantitative Finance, 2015, 15(8): 1279-1291.】这里考虑同时使用限价单和市价单进行交易,从而能够完成 Almgren-Chriss 模型所规定的方案,或者找到一个更有的交易方案。https://sci-hub.se//https://www.tandfonline.com/doi/abs/10.1080/14697688.2015.1032543

  • 【Bulthuis, Brian, et al. "Optimal execution of limit and market orders with trade director, speed limiter, and fill uncertainty." International Journal of Financial Engineering 4.02n03 (2017): 1750020.】也是考虑使用限价单和市价单一起交易。https://arxiv.org/pdf/1604.04963.pdf张楚珩:【交易执行】市价单+限价单 最优执行

  • 【Cartea A, Jaimungal S. Incorporating order-flow into optimal execution[J]. Mathematics and Financial Economics, 2016, 10(3): 339-364.】这里考虑市场所有交易者的订单都会产生线性的短期/长期市场冲击,因此可以估计未来一段时间的订单流向(买单总量和卖单总量的差),从而能够在 Almgren-Chriss 模型的基础上进行一定的调整,使得策略更优。https://sci-hub.se//https://link.springer.com/content/pdf/10.1007/s11579-016-0162-z.pdf

  • 图书

  • 【Cartea Á, Jaimungal S, Penalva J. Algorithmic and high-frequency trading[M]. Cambridge University Press, 2015.】讲交易执行的基础上,更侧重讲了一些数学工具。

  • 【Guéant O. The Financial Mathematics of Market Liquidity: From optimal execution to market making[M]. CRC Press, 2016.】从 Almgren-Chriss 模型开始讲,一直到相应的拓展和实际的问题,十分推荐。

  • 融合对于市场环境隐变量的估计

  • 【Casgrain P, Jaimungal S. Trading algorithms with learning in latent alpha models[J]. Mathematical Finance, 2019, 29(3): 735-772.】市场交易者会根据不同的市场挂单和价格走势而采取不同的反映,因此我们也可以根据历史数据学习到各种情况下的价格后验分布,从而更好地帮助我们进行交易执行或者套利。最后的结果可以看做在 Almgren-Chriss 模型的基础上外加了一个调控项,反映我们对于未来的预期。https://arxiv.org/pdf/1806.04472.pdf

  • 如何实现以按量加权平均价格(VWAP)交易

  • 【Kakade, Sham M., et al. "Competitive algorithms for VWAP and limit order trading." Proceedings of the 5th ACM conference on Electronic commerce. 2004.】从在线学习的角度提出了几个用于使得我们交易到 VWAP 价格的模型。为什么会关注 VWAP 的交易执行?当大的流通股股东需要减持的时候,为了避免直接出售引起的价格波动,一般是把需要减持的股票卖给券商,然后由券商来拆单出售,而交易价格一般为未来一段时间的 VWAP,因此券商需要尽量以 VWAP 来交易执行。https://sci-hub.se//https://dl.acm.org/doi/abs/10.1145/988772.988801

  • 【Białkowski, Jędrzej, Serge Darolles, and Gaëlle Le Fol. "Improving VWAP strategies: A dynamic volume approach." Journal of Banking & Finance 32.9 (2008): 1709-1722.】改进对于交易量的建模,从而得到更好的 VWAP 交易算法。把交易量拆分为两个部分,一部分是市场整体的交易量变动,另一部分是特定股票上的交易量模式。https://sci-hub.se//https://www.sciencedirect.com/science/article/pii/S0378426607003226

  • 以按时间加权平均价格(TWAP)交易

  • 为了对称,可以介绍一下另一种加权平均的情形 TWAP,这种情形实现起来相对比较简单;如果不考虑市场冲击,就拆分到每个时间步上均匀出售即可实现。

  • 可以证明 TWAP 交易在以下两种情形下最优:市场价格为布朗运动并且价格冲击为常数;对于晚交易没有惩罚(其实更晚交易意味着面临更大的风险),但是对于最后未完成交易的惩罚较大。

  • 二、强化学习方法

    基于传统模型的强化学习方法

  • 【Hendricks D, Wilcox D. A reinforcement learning extension to the Almgren-Chriss framework for optimal trade execution[C]//2014 IEEE Conference on Computational Intelligence for Financial Engineering & Economics (CIFEr). IEEE, 2014: 457-464.】本专栏有讲。https://arxiv.org/pdf/1403.2229.pdf

  • 强化学习 + 交易执行(Paper/Article)

  • 【Nevmyvaka Y, Feng Y, Kearns M. Reinforcement learning for optimized trade execution[C]//Proceedings of the 23rd international conference on Machine learning. 2006: 673-680.】比较经典的一篇,发在 ICML 上,本专栏前面有讲。使用 DQN 方法,实现形式接近 DP。http://smallake.kr/wp-content/uploads/2019/01/rlexec.pdf

  • 【Dabérius K, Granat E, Karlsson P. Deep Execution-Value and Policy Based Reinforcement Learning for Trading and Beating Market Benchmarks[J]. Available at SSRN 3374766, 2019.】使用了 DDQN 和 PPO 方法,基于生成的价格序列来进行实验,使用特定的模型考虑短期和长期市场冲击。https://sci-hub.se//https://papers.ssrn.com/sol3/papers.cfm?abstract_id=3374766

  • 【Ning B, Lin F H T, Jaimungal S. Double deep q-learning for optimal execution[J]. arXiv preprint arXiv:1812.06600, 2018.】DDQN 的强化学习解法,在美股上实验。https://arxiv.org/pdf/1812.06600.pdf

  • 【Lin S, Beling P A. An End-to-End Optimal Trade Execution Framework based on Proximal Policy Optimization[C]//IJCAI. 2020: 4548-4554.】使用 PPO 的解法,比较有意思的是这里面的实验结果显示,使用 LSTM 和把历史数据全部堆叠起来用 MLP 效果差距不大。也是在美股上实验。https://www.ijcai.org/Proceedings/2020/0627.pdf

  • 【Fang Y, Ren K, Liu W, et al. Universal Trading for Order Execution with Oracle Policy Distillation[J]. arXiv preprint arXiv:2103.10860, 2021.】在使用强化学习的基础上,引入了一个教师网络,教师网络学习一个基于未来数据的策略,并且用于训练学生网络。本专栏前面有讲。https://www.aaai.org/AAAI21Papers/AAAI-3650.FangY.pdf

  • 【Vyetrenko S, Xu S. Risk-sensitive compact decision trees for autonomous execution in presence of simulated market response[J]. arXiv preprint arXiv:1906.02312, 2019.】ICML-19 的文章。构造了一个可以反映市价单市场冲击的模拟器;使用 tabular Q-learning 来学习基于决策树的模型;使用特征选择的方法来筛选特征。通过以上方式,能够学习到一个模型帮助决策什么时候应该下市价单、什么时候应该下限价单。https://arxiv.org/pdf/1906.02312.pdf

  • 【Akbarzadeh N, Tekin C, van der Schaar M. Online learning in limit order book trade execution[J]. IEEE Transactions on Signal Processing, 2018, 66(17): 4626-4641.】从 online learning 的视角来解决这个问题,使用 DP 类的方法,分析 regret 。http://repository.bilkent.e.tr/bitstream/handle/11693/50289/Bilkent-research-paper.pdf?sequence=1

  • 【Wei H, Wang Y, Mangu L, et al. Model-based reinforcement learning for predictions and control for limit order books[J]. arXiv preprint arXiv:1910.03743, 2019.】专栏刚刚讲了的一篇文章,使用 model-based 类的强化学习算法,直接学习一个世界模型,然后让强化学习策略通过和世界模型的交互进行学习。https://arxiv.org/pdf/1910.03743.pdf

  • 【Karpe M, Fang J, Ma Z, et al. Multi-agent reinforcement learning in a realistic limit order book market simulation[J]. arXiv preprint arXiv:2006.05574, 2020.】这里的多智能体似乎适用于结合历史数据生成其他市场参与者的动作,而最优策略的学习仍然是使用单智能体 DDQN 方法来做。他们开源了一个考虑多智能体的模拟环境 ABIDES。https://arxiv.org/pdf/2006.05574.pdf

  • 【Schnaubelt M. Deep reinforcement learning for the optimal placement of cryptocurrency limit orders[J]. European Journal of Operational Research, 2022, 296(3): 993-1006.】研究数字货币上如何下限价单。对比了 PPO 和 DDQN,发现 PPO 更好。探索出了一些重要的因子,比如 current liquidity cost,queue imbalance 等。https://www.econstor.eu/bitstream/10419/216206/1/1696077540.pdf

  • 强化学习 + 交易执行 (Thesis)

  • 【Hu R. Optimal Order Execution using Stochastic Control and Reinforcement Learning[J]. 2016.】KTH (瑞典)工程学院硕士论文。算法直接是基于价值函数的动态规划。不过提供了比较详细的模拟环境和算法伪代码。https://www.diva-portal.org/smash/get/diva2:963057/FULLTEXT01.pdf

  • 【Rockwell B. Optimal Order Execution with Deep Reinforcement Learning[J]. 2019.】加拿大蒙特利尔高等商学院硕士论文。使用 TD3 和 DDPG 算法,不过实验是基于人工生成的数据的(skew-normal Brownian motion)。https://biblos.hec.ca/biblio/memoires/m2019a628776.pdf

  • 【Reiter M B. An Application of Deep Reinforcement Learning for Order Execution[D]. School of Engineering Science, Osaka University, 2020.】多伦多大学本科毕业论文。在使用 A3C 算法的基础上,考虑了使用教师学生网络的方式进行迁移学习,并且考虑了短期市场冲击。https://mbreiter.github.io/doc/thesis.pdf

  • 强化学习 + 风险偏好

  • Robust Risk-Sensitive Reinforcement Learning Agents for Trading Markets

  • Deep equal risk pricing of financial derivatives with non-translation invariant risk measures

  • 强化学习 + 做市策略

  • Optimal Market Making by Reinforcement Learning

  • Optimizing Market Making using Multi-Agent Reinforcement Learning

  • Deep Reinforcement Learning for Market Making

  • Deep Recurrent Q-Networks for Market Making

  • Robust Market Making via Adversarial Reinforcement Learning

  • Market making via reinforcement learning

  • 强化学习 + 资产组合

  • Deep Stock Trading: A Hierarchical Reinforcement Learning Framework for Portfolio Optimization and Order Execution

  • Robo-Advising: Enhancing Investment with Inverse Optimization and Deep Reinforcement Learning

  • Large Scale Continuous-Time Mean-Variance Portfolio Allocation via Reinforcement Learning

5. 股票交易异动规则

如果上市公司股票出现异常波动,交易所将实施临时停牌制度。相关的暂停规则如下:

沪深主板:

1.连续三个交易日日收盘价偏离度累计达到20%。

2.连续三个交易日日均换手率与前五个交易日日均换手率之比为30倍,连续三个交易日累计换手率为20%。

上述两点停牌一小时,停牌时间跨越14:57,当日14:57复牌。

3.深交所新股上市首日,盘中成交价较当日开盘价首次上涨或下跌超过10%。交易会暂时停牌30小时,之后可以涨到44%。

4.股票在风险警示板的日收盘价偏离度连续三个交易日累计达到15%,应当停牌至少一个交易日。

创业板和科技创新板:

1.首日涨跌幅比开盘价高30%或60%,各停牌10分钟。

2.连续三个交易日内每日收盘价偏离值累计达到30%的,应当暂停交易至少一个交易日。

[扩展信息]

股票异常波动一般是短期资金的大规模炒作,或者公司重组等题材的炒作造成的。

基本解释

根据交易所交易规则,连续三个交易日收盘价偏离度超过20%(ST,*ST为15%),不存在根据有关规定应当披露的未披露事项,或者与该事项有关的对公司股票交易价格有较大影响的计划、谈判、意向、协议等信息,称为股票交易异常波动。上交所是指连续三个交易日交易达到涨停限制时的异常波动(涨跌均包括在内)。

深交所连续三个交易日收盘价涨幅累计偏离度20%。如果不正常,就暂停一个小时。

出现下列情形之一的,证券交易所将根据市场情况确定是否属于股票交易异常波动。(1)如果一只股票连续三个交易日的日收盘价偏离度达到20%(2011年以前特别处理的ST和*ST为15%,现在修正为12%),则属于异常波动。解释:偏离值是指股票与相关基准指数的偏离值。在上海证券交易所上市的股票的基准指数为上海证券交易所,在深圳证券交易所上市的股票的基准指数为深圳证券交易所。偏差值的计算方法如下:假设股票(非ST或S类)今日下跌10%,而相关基准指数上涨1%,其当日偏差值为=-10%-1%=-11%,即该股票当日偏差值下跌11%。但有些股票(非ST或S类)经常会遇到连续三天上涨或下跌的累计偏差值超过20%的情况,而这20%是把该股票连续三天的偏差值加起来算出来的。比如股票涨跌基准指数,第一天偏差8% -1% 9%,第二天偏差7% 2% 5%,第三天偏差10% 3% 7%,三天累计偏差21%。(2)股票连续五个交易日被列入“股票与基金公开信息”;(三)股票价格连续三个交易日振幅达到15%。(4)股票连续五个交易日日均成交量日均涨幅达到50%;(五)证券交易所或者中国证监会认为属于异常波动的其他情形。前款第(一)至第(四)项所列情形之一被认定为异常波动的,自公告之日起重新开始异常波动的计算。上市公司因召开股东大会、发布定期报告等原因例行停牌时。,其异常波动的计算从股票复牌之日重新开始。

6. 股票涨跌有什么规律吗

从历史经验来看,股市在战争期初是下跌的,战争开打以后会加速下跌,在战争中期会恢复到原来的运行轨道中。战争后期,如果是胜利的,那么股市会大涨,如果是失败的,股市会走弱。从中国的形势来看,主要是以恢复上涨为主的,因为战争对市场的影响是有限的。

因为战争中能握者够刺激经济大生产,这样有利于企业加快生产,加快资金周转。所以从这个角度来说是对企业有利的。股票看是赔还是赚,主要就是看股票的价格跟买入时的价格之间相比是变高了还是变低了。

如果变高了就是赚了,变低了就是赔了。股票交易指的是股票投资者之间按照市场价格对已经发行上市的股票所进行的买卖活动。股票进行公开转让的场所首先就是证券交易所。

股票价格变动
股票消喊价格的变动,简单来说指的就是买方和卖方的的博弈,因为买的人觉得股票后期的价值会高于现价,所以会买入,而卖出的人会觉得股票后期的价值会降低,所以卖出。如果买的人大大多于卖的人那么就会推段桥薯高股票的价格。但是如果当卖方力量大于涨停时的买方力量时,涨停就会被打开。

比如,X(1+10%)的价位有10000手买单,也就是“封涨停板”。但如果不断的有抛盘涌出,并且卖方大于买方的话,10000手交易完成后,卖方如果想交易,就不得不降低价格来卖出,这时股票的价格就会下跌,也就是我们俗称的“打开涨停”。此时的买方卖方又开始博弈。

而此外,影响股票涨跌的因素还有很多,大致分成,宏观因素和微观因素。宏观因素主要包括国家政策、战争霍乱以及宏观经济等;而微观因素主要是市场因素,公司内部、行业结构以及投资者的心理等。

7. 股票的交易时间段是怎样的

根据A股股票交易时间来划分为三个阶段和四个节点:
早盘集合竞价:9:15:~9:30分属于早盘集合竞价,而9:15~9:20分可以挂单也可以撤单;9:20~9:25分可以挂单但不可以撤单;9:25~9:30分可以接受挂单,但数据不提交交易所,要等到9:30分才会提交数据到交易所。
盘中撮合交易:9:30~11:30分和13:00~14:57分这个时间段称为盘中撮合交易时间段,直接根据大家的实时挂单情况进行申报数据,撮合成交交易。
尾盘集合竞价:14:57~15:00点为尾盘竞价时间段,这个时候段只有3分钟,根据这3分钟的情况撮合成交,以成交额最大的那笔单为股票当天的收盘价收盘。
拓展资料:
一入股市深似海,从此股票似亲人。不过,入股市首先得懂股市,懂得股市行话,才能更好地在股市中遨游,股票交易规则如下:
一、交易时间
股市交易讲究先来后到,讲究时间优先和价格优先,不像在菜市场中大家可以一哄而上,它有规定的时间进行买卖,而这个时间跟我们上班的时间基本上差不多,也是周一到周五,法定节假日双休日都是没有开放的,一般是每天上午9:30到11:30,下午13:00至15:00,一天4个小时,据说操盘手的上班时间也是这样,是不是特别爽。
集合竞价(9:15—9:25)是一个特殊时间段,这段时间可以委托买进和卖出单子,其中9:15-9:20可以撤单,9:20—9:25不能撤单,此时成交量最大的价格就是开盘价。
二、交易制度
我大A股很正经,它实行T+1交易制度,当天买的第二天才能卖掉,当天卖的股票第二天才能把钱钱取出来;而全世界包括HongKong都是实行T+0,当天买当天就可以卖出,不过这两种制度互有利弊啦~
三、涨跌幅限制
股票波动如果太疯狂的话,可能会引起市场合投资者的不适,所以不能太任性,它设有单日最大涨跌幅,一般情况下,普通股是10%,ST股更严格,只有5%。
但也有一些身份特殊首缺没的没有这个限者纳制,比如上市首日的新股,借壳上市的股票,回复上市日的退市股票,还有最近红得发紫的科创板,涨跌幅放宽至20%,新股上市前5个交易日还不设涨跌幅限扮帆制,是不是够牛掰~
四、交易和报价单位
平常毛毛经常听身边的小伙伴说买了几百股的股票,其实这个手法不是很正规,应该是讲几手的。股票的报价和交易单位为股,一支股票的最低交易额为一手,一手=100股,委托买入和卖出必须是1手,或为其整数倍。
比方说5元1股的股票,你需要买入的最低额度为100股,也就是1手,需要花费5*100=500元。
五、交易方式
包括柜台,交易商进行集中交易,减少了市场庄家这环节,成本相对交易所要低;电脑PC端操作,下载相应的证券公司软件,比如同花顺、大智慧的PC端进行买卖操作;手机移动端,是目前最流行快捷的方式,现在每个证券公司都有相应的APP,可以在手机上下载进行股票交易。

8. 什么是动态规划如何运用动态规划解决实际问题

我也不明白,找一下看有用没。

动态规划算法的应用
一、动态规划的概念
近年来,涉及动态规划的各种竞赛题越来越多,每一年的NOI几乎都至少有一道题目需要用动态规划的方法来解决;而竞赛对选手运用动态规划知识的要求也越来越高,已经不再停留于简单的递推和建模上了。
要了解动态规划的概念,首先要知道什么是多阶段决策问题。
1. 多阶段决策问题
如果一类活动过程可以分为若干个互相联系的阶段,在每一个阶段都需作出决策(采取措施),一个阶段的决策确定以后,常常影响到下一个阶段的决策,从而就完全确定了一个过程的活动路线,则称它为多阶段决策问题。
各个阶段的决策构成一个决策序列,称为一个策略。每一个阶段都有若干个决策可供选择,因而就有许多策略供我们选取,对应于一个策略可以确定活动的效果,这个效果可以用数量来确定。策略不同,效果也不同,多阶段决策问题,就是要在可以选择的那些策略中间,选取一个最优策略,使在预定的标准下达到最好的效果.
2.动态规划问题中的术语
阶段:把所给求解问题的过程恰当地分成若干个相互联系的阶段,以便于求解,过程不同,阶段数就可能不同.描述阶段的变量称为阶段变量。在多数情况下,阶段变量是离散的,用k表示。此外,也有阶段变量是连续的情形。如果过程可以在任何时刻作出决策,且在任意两个不同的时刻之间允许有无穷多个决策时,阶段变量就是连续的。
在前面的例子中,第一个阶段就是点A,而第二个阶段就是点A到点B,第三个阶段是点B到点C,而第四个阶段是点C到点D。
状态:状态表示每个阶段开始面临的自然状况或客观条件,它不以人们的主观意志为转移,也称为不可控因素。在上面的例子中状态就是某阶段的出发位置,它既是该阶段某路的起点,同时又是前一阶段某支路的终点。
在前面的例子中,第一个阶段有一个状态即A,而第二个阶段有两个状态B1和B2,第三个阶段是三个状态C1,C2和C3,而第四个阶段又是一个状态D。
过程的状态通常可以用一个或一组数来描述,称为状态变量。一般,状态是离散的,但有时为了方便也将状态取成连续的。当然,在现实生活中,由于变量形式的限制,所有的状态都是离散的,但从分析的观点,有时将状态作为连续的处理将会有很大的好处。此外,状态可以有多个分量(多维情形),因而用向量来代表;而且在每个阶段的状态维数可以不同。
当过程按所有可能不同的方式发展时,过程各段的状态变量将在某一确定的范围内取值。状态变量取值的集合称为状态集合。
无后效性:我们要求状态具有下面的性质:如果给定某一阶段的状态,则在这一阶段以后过程的发展不受这阶段以前各段状态的影响,所有各阶段都确定时,整个过程也就确定了。换句话说,过程的每一次实现可以用一个状态序列表示,在前面的例子中每阶段的状态是该线路的始点,确定了这些点的序列,整个线路也就完全确定。从某一阶段以后的线路开始,当这段的始点给定时,不受以前线路(所通过的点)的影响。状态的这个性质意味着过程的历史只能通过当前的状态去影响它的未来的发展,这个性质称为无后效性。
决策:一个阶段的状态给定以后,从该状态演变到下一阶段某个状态的一种选择(行动)称为决策。在最优控制中,也称为控制。在许多间题中,决策可以自然而然地表示为一个数或一组数。不同的决策对应着不同的数值。描述决策的变量称决策变量,因状态满足无后效性,故在每个阶段选择决策时只需考虑当前的状态而无须考虑过程的历史。
决策变量的范围称为允许决策集合。
策略:由每个阶段的决策组成的序列称为策略。对于每一个实际的多阶段决策过程,可供选取的策略有一定的范围限制,这个范围称为允许策略集合。允许策略集合中达到最优效果的策略称为最优策略。
给定k阶段状态变量x(k)的值后,如果这一阶段的决策变量一经确定,第k+1阶段的状态变量x(k+1)也就完全确定,即x(k+1)的值随x(k)和第k阶段的决策u(k)的值变化而变化,那么可以把这一关系看成(x(k),u(k))与x(k+1)确定的对应关系,用x(k+1)=Tk(x(k),u(k))表示。这是从k阶段到k+1阶段的状态转移规律,称为状态转移方程。
最优性原理:作为整个过程的最优策略,它满足:相对前面决策所形成的状态而言,余下的子策略必然构成“最优子策略”。
最优性原理实际上是要求问题的最优策略的子策略也是最优。让我们通过对前面的例子再分析来具体说明这一点:从A到D,我们知道,最短路径是AB1C2D,这些点的选择构成了这个例子的最优策略,根据最优性原理,这个策略的每个子策略应是最优:AB1C2是A到C2的最短路径,B1C2D也是B1到D的最短路径……——事实正是如此,因此我们认为这个例子满足最优性原理的要求。
[编辑本段]动态规划练习题
USACO
2.2 Subset Sums
题目如下:
对于从1到N的连续整集合合,能划分成两个子集合,且保证每个集合的数字和是相等的。
举个例子,如果N=3,对于{1,2,3}能划分成两个子集合,他们每个的所有数字和是相等的:
{3}and {1,2}
这是唯一一种分发(交换集合位置被认为是同一种划分方案,因此不会增加划分方案总数)
如果N=7,有四种方法能划分集合{1,2,3,4,5,6,7},每一种分发的子集合各数字和是相等的:
{1,6,7} and {2,3,4,5} {注 1+6+7=2+3+4+5}
{2,5,7} and {1,3,4,6}
{3,4,7} and {1,2,5,6}
{1,2,4,7} and {3,5,6}
给出N,你的程序应该输出划分方案总数,如果不存在这样的划分方案,则输出0。程序不能预存结果直接输出。
PROGRAM NAME: subset
INPUT FORMAT
输入文件只有一行,且只有一个整数N
SAMPLE INPUT (file subset.in)
7
OUTPUT FORMAT
输出划分方案总数,如果不存在则输出0。
SAMPLE OUTPUT (file subset.out)
4
参考程序如下(c语言):
#include <fstream>
using namespace std;
const unsigned int MAX_SUM = 1024;
int n;
unsigned long long int dyn[MAX_SUM];
ifstream fin ("subset.in");
ofstream fout ("subset.out");
int main() {
fin >> n;
fin.close();
int s = n*(n+1);
if (s % 4) {
fout << 0 << endl;
fout.close ();
return ;
}
s /= 4;
int i, j;
dyn [0] = 1;
for (i = 1; i <= n; i++)
for (j = s; j >= i; j--)
dyn[j] += dyn[j-i];
fout << (dyn[s]/2) << endl;
fout.close();
return 0;
}
USACO 2.3
Longest Prefix
题目如下:
在生物学中,一些生物的结构是用包含其要素的大写字母序列来表示的。生物学家对于把长的序列分解成较短的(称之为元素的)序列很感兴趣。
如果一个集合 P 中的元素可以通过串联(允许重复;串联,相当于 Pascal 中的 “+” 运算符)组成一个序列 S ,那么我们认为序列 S 可以分解为 P 中的元素。并不是所有的元素都必须出现。举个例子,序列 ABABACABAAB 可以分解为下面集合中的元素:
{A, AB, BA, CA, BBC}
序列 S 的前面 K 个字符称作 S 中长度为 K 的前缀。设计一个程序,输入一个元素集合以及一个大写字母序列,计算这个序列最长的前缀的长度。
PROGRAM NAME: prefix
INPUT FORMAT
输入数据的开头包括 1..200 个元素(长度为 1..10 )组成的集合,用连续的以空格分开的字符串表示。字母全部是大写,数据可能不止一行。元素集合结束的标志是一个只包含一个 “.” 的行。集合中的元素没有重复。接着是大写字母序列 S ,长度为 1..200,000 ,用一行或者多行的字符串来表示,每行不超过 76 个字符。换行符并不是序列 S 的一部分。
SAMPLE INPUT (file prefix.in)
A AB BA CA BBC
.
ABABACABAABC
OUTPUT FORMAT
只有一行,输出一个整数,表示 S 能够分解成 P 中元素的最长前缀的长度。
SAMPLE OUTPUT (file prefix.out)
11
示例程序如下:
#include <stdio.h>
/* maximum number of primitives */
#define MAXP 200
/* maximum length of a primitive */
#define MAXL 10
char prim[MAXP+1][MAXL+1]; /* primitives */
int nump; /* number of primitives */
int start[200001]; /* is this prefix of the sequence expressible? */
char data[200000]; /* the sequence */
int ndata; /* length of the sequence */
int main(int argc, char **argv)
{
FILE *fout, *fin;
int best;
int lv, lv2, lv3;
if ((fin = fopen("prim.in", "r")) == NULL)
{
perror ("fopen fin");
exit(1);
}
if ((fout = fopen("prim.out", "w")) == NULL)
{
perror ("fopen fout");
exit(1);
}
/* read in primitives */
while (1)
{
fscanf (fin, "%s", prim[nump]);
if (prim[nump][0] != '.') nump++;
else break;
}
/* read in string, one line at a time */
ndata = 0;
while (fscanf (fin, "%s", data+ndata) == 1)
ndata += strlen(data+ndata);
start[0] = 1;
best = 0;
for (lv = 0; lv < ndata; lv++)
if (start[lv])
{ /* for each expressible prefix */
best = lv; /* we found a longer expressible prefix! */
/* for each primitive, determine the the sequence starting at
this location matches it */
for (lv2 = 0; lv2 < nump; lv2++)
{
for (lv3 = 0; lv + lv3 < ndata && prim[lv2][lv3] &&
prim[lv2][lv3] == data[lv+lv3]; lv3++)
;
if (!prim[lv2][lv3]) /* it matched! */
start[lv + lv3] = 1; /* so the expanded prefix is also expressive */
}
}
/* see if the entire sequence is expressible */
if (start[ndata]) best = ndata;
fprintf (fout, "%i\n", best);
return 0;
}
USACO 3.1
Score Inflation
题目如下:
我们试着设计我们的竞赛以便人们能尽可能的多得分,这需要你的帮助。
我们可以从几个种类中选取竞赛的题目,这里的一个"种类"是指一个竞赛题目的集合,解决集合中的题目需要相同多的时间并且能得到相同的分数。
你的任务是写一个程序来告诉USACO的职员,应该从每一个种类中选取多少题目,使得解决题目的总耗时在竞赛规定的时间里并且总分最大。
输入包括竞赛的时间,M(1 <= M <= 10,000)和N,"种类"的数目1 <= N <= 10,000。
后面的每一行将包括两个整数来描述一个"种类":
第一个整数说明解决这种题目能得的分数(1 <= points <= 10000),第二整数说明解决这种题目所需的时间(1 <= minutes <= 10000)。
你的程序应该确定我们应该从每个"种类"中选多少道题目使得能在竞赛的时间中得到最大的分数。
来自任意的"种类"的题目数目可能任何非负数(0或更多)。
计算可能得到的最大分数。
PROGRAM NAME: inflate
INPUT FORMAT
第 1 行: M, N--竞赛的时间和题目"种类"的数目。
第 2-N+1 行: 两个整数:每个"种类"题目的分数和耗时。
SAMPLE INPUT (file inflate.in)
300 4
100 60
250 120
120 100
35 20
OUTPUT FORMAT
单独的一行包括那个在给定的限制里可能得到的最大的分数。
SAMPLE OUTPUT (file inflate.out)
605
{从第2个"种类"中选两题,第4个"种类"中选三题}
示例程序如下:
#include <fstream.h>
ifstream fin("inflate.in");
ofstream fout("inflate.out");
const short maxm = 10010;
long best[maxm], m, n;
void
main()
{
short i, j, len, pts;
fin >> m >> n;
for (j = 0; j <= m; j++)
best[j] = 0;
for (i = 0; i < n; i++) {
fin >> pts >> len;
for (j = len; j <= m; j++)
if (best[j-len] + pts > best[j])
best[j] = best[j-len] + pts;
}
fout << best[m] << endl; // 由于数组元素不减,末元素最大
}
USACO 3.3
A Game
题目如下:
有如下一个双人游戏:N(2 <= N <= 100)个正整数的序列放在一个游戏平台上,两人轮流从序列的两端取数,取数后该数字被去掉并累加到本玩家的得分中,当数取尽时,游戏结束。以最终得分多者为胜。
编一个执行最优策略的程序,最优策略就是使自己能得到在当前情况下最大的可能的总分的策略。你的程序要始终为第二位玩家执行最优策略。
PROGRAM NAME: game1
INPUT FORMAT
第一行: 正整数N, 表示序列中正整数的个数。
第二行至末尾: 用空格分隔的N个正整数(大小为1-200)。
SAMPLE INPUT (file game1.in)
6
4 7 2 9
5 2
OUTPUT FORMAT
只有一行,用空格分隔的两个整数: 依次为玩家一和玩家二最终的得分。
SAMPLE OUTPUT (file game1.out)
18 11
参考程序如下:
#include <stdio.h>
#define NMAX 101
int best[NMAX][2], t[NMAX];
int n;
void
readx () {
int i, aux;
freopen ("game1.in", "r", stdin);
scanf ("%d", &n);
for (i = 1; i <= n; i++) {
scanf ("%d", &aux);
t = t[i - 1] + aux;
}
fclose (stdin);
}
inline int
min (int x, int y) {
return x > y ? y : x;
}
void
solve () {
int i, l;
for (l = 1; l <= n; l++)
for (i = 1; i + l <= n + 1; i++)
best[l%2] = t[i + l - 1] - t[i - 1] - min (best[i + 1][(l - 1) % 2],
best[(l - 1) % 2]);
}
void writex () {
freopen ("game1.out", "w", stdout);
printf ("%d %d\n", best[1][n % 2], t[n] - best[1][n % 2]);
fclose (stdout);
}
int
main () {
readx ();
solve ();
writex ();
return 0;
}
USACO 3.4
Raucous Rockers
题目如下:
你刚刚得到了流行的“破锣摇滚”乐队录制的尚未发表的N(1 <= N <= 20)首歌的版权。你打算从中精选一些歌曲,发行M(1 <= M <= 20)张CD。每一张CD最多可以容纳T(1 <= T <= 20)分钟的音乐,一首歌不能分装在两张CD中。
不巧你是一位古典音乐迷,不懂如何判定这些歌的艺术价值。于是你决定根据以下标准进行选择:
歌曲必须按照创作的时间顺序在CD盘上出现。
选中的歌曲数目尽可能地多。
PROGRAM NAME: rockers
INPUT FORMAT
第一行: 三个整数:N, T, M.
第二行: N个整数,分别表示每首歌的长度,按创作时间顺序排列。
SAMPLE INPUT (file rockers.in)
4 5 2
4 3 4 2
OUTPUT FORMAT
一个整数,表示可以装进M张CD盘的乐曲的最大数目。
SAMPLE OUTPUT (file rockers.out)
3
参考程序如下:
#include <stdio.h>
#define MAX 25
int dp[MAX][MAX][MAX], length[MAX];
int
main ()
{
FILE *in = fopen ("rockers.in", "r");
FILE *out = fopen ("rockers.out", "w");
int a, b, c, d, best, numsongs, cdlength, numcds;
fscanf (in, "%d%d%d", &numsongs, &cdlength, &numcds);
for (a = 1; a <= numsongs; a++)
fscanf (in, "%d", &length[a]);
best = 0;
for (a = 0; a < numcds; a++)/*当前cd */
for (b = 0; b <= cdlength; b++) /* 已过的时间*/
for (c = 0; c <= numsongs; c++) { /* 上一曲*/
for (d = c + 1; d <= numsongs; d++) { /* 下一曲*/
if (b + length[d] <= cdlength) {
if (dp[a][c] + 1 > dp[a][b + length[d]][d])
dp[a][b + length[d]][d] = dp[a][c] + 1;
}
else {
if (dp[a][c] + 1 > dp[a + 1][length[d]][d])
dp[a + 1][length[d]][d] = dp[a][c] + 1;
}
}
if (dp[a][c] > best)
best = dp[a][c];
}
fprintf (out, "%d\n", best);
return 0;
}
USACO
4.3 Buy Low, Buy Lower
“逢低吸纳”是炒股的一条成功秘诀。如果你想成为一个成功的投资者,就要遵守这条秘诀:
"逢低吸纳,越低越买"
这句话的意思是:每次你购买股票时的股价一定要比你上次购买时的股价低.按照这个规则购买股票的次数越多越好,看看你最多能按这个规则买几次。
给定连续的N天中每天的股价。你可以在任何一天购买一次股票,但是购买时的股价一定要比你上次购买时的股价低。写一个程序,求出最多能买几次股票。
以下面这个表为例, 某几天的股价是:
天数 1 2 3 4 5 6 7 8 9 10 11 12
股价 68 69 54 64 68 64 70 67 78 62 98 87
这个例子中, 聪明的投资者(按上面的定义),如果每次买股票时的股价都比上一次买时低,那么他最多能买4次股票。一种买法如下(可能有其他的买法):
天数 2 5 6 10
股价 69 68 64 62
PROGRAM NAME: buylow
INPUT FORMAT
第1行: N (1 <= N <= 5000), 表示能买股票的天数。
第2行以下: N个正整数 (可能分多行) ,第i个正整数表示第i天的股价. 这些正整数大小不会超过longint(pascal)/long(c++).
SAMPLE INPUT (file buylow.in)
12
68 69 54 64 68 64 70 67
78 62 98 87
OUTPUT FORMAT
只有一行,输出两个整数:
能够买进股票的天数
长度达到这个值的股票购买方案数量
在计算解的数量的时候,如果两个解所组成的字符串相同,那么这样的两个解被认为是相同的(只能算做一个解)。因此,两个不同的购买方案可能产生同一个字符串,这样只能计算一次。
SAMPLE OUTPUT (file buylow.out)
4 2
参考程序如下:
#include <stdio.h>
#include <assert.h>
#include <stdlib.h>
typedef struct BIGNUM *bignum_t;
struct BIGNUM
{
int val;
bignum_t next;
};
int num[5000];
int len[5000];
int nlen;
bignum_t cnt[5000];
bignum_t get_big(void)
{
static bignum_t block;
static int size = 0;
if (size == 0)
{
block = (bignum_t)malloc(sizeof(*block)*128);
size = 128;
}
size--;
return block++;
}
/*初始化高精度数*/
void init_big(bignum_t *num, int val)
{
*num = get_big();
/* initialize */
(*num)->val = val;
(*num)->next = NULL;
}
void add(bignum_t a, bignum_t b)
{
int c; /* carry */
c = 0;
while (b || c)
{
a->val += c;
if (b) a->val += b->val;
/* if a->val is too large, we need to carry */
c = (a->val / 1000000);
a->val = (a->val % 1000000);
if (b) b = b->next;
if (!a->next && (b || c))
{ /* allocate if we need to */
a->next = get_big();
a = a->next;
a->val = 0;
a->next = NULL;
} else a = a->next;
}
}
void out_num(FILE *f, bignum_t v)
{
if (v->next)
{
out_num(f, v->next);
fprintf (f, "%06i", v->val);
}
else
fprintf (f, "%i", v->val);
}
int main(int argc, char **argv)
{
FILE *fout, *fin;
int lv, lv2;
int c;
int max;
int l;
bignum_t ans;
if ((fin = fopen("buylow.in", "r")) == NULL)
{
perror ("fopen fin");
exit(1);
}
if ((fout = fopen("buylow.out", "w")) == NULL)
{
perror ("fopen fout");
exit(1);
}
fscanf (fin, "%d", &nlen);
for (lv = 0; lv < nlen; lv++)
fscanf (fin, "%d", &num[lv]);
/* 用DP计算最大长度*/
for (lv = 0; lv < nlen; lv++)
{
max = 1;
for (lv2 = lv-1; lv2 >= 0; lv2--)
if (num[lv2] > num[lv] && len[lv2]+1 > max) max = len[lv2]+1;
len[lv] = max;
}
for (lv = 0; lv < nlen; lv++)
{
if (len[lv] == 1) init_big(&cnt[lv], 1);
else
{
init_big(&cnt[lv], 0);
l = -1;
max = len[lv]-1;
for (lv2 = lv-1; lv2 >= 0; lv2--)
if (len[lv2] == max && num[lv2] > num[lv] && num[lv2] != l)
add(cnt[lv], cnt[lv2]);
l = num[lv2];
}
}
}
/* 找最长串*/
max = 0;
for (lv = 0; lv < nlen; lv++)
if (len[lv] > max) max = len[lv];
init_big(&ans, 0);
l = -1;
for (lv = nlen-1; lv >= 0; lv--)
if (len[lv] == max && num[lv] != l)
{
add(ans, cnt[lv]);
l = num[lv];
}
/* output answer */
fprintf (fout, "%i ", max);
out_num(fout, ans);
fprintf (fout, "\n");
return 0;
}
动态规划作为一种重要的信息学竞赛算法,具有很强的灵活性。以上提供的是一些入门练习题,深入的学习还需要逐步积累经验。

9. 103. leetcode笔记(1~60)

d1

https://leetcode-cn.com/problems/two-sum
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
【hashmap存储】

给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。
请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。

nums1 = [1, 2]
nums2 = [3, 4]
则中位数是 (2 + 3)/2 = 2.5
【奇偶判断】

给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。
【双循环贪心】

d2

判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
输入: 121
输出: true
【折半比较】

给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。
在构造过程中,请注意区分大小写。比如 "Aa" 不能当做一个回文字符串。
注意:
假设字符串的长度不会超过 1010。
示例:
输入:
"abccccdd"
输出:
7
【集合更新与判空】(add remove, 放入可回文的字符,无重复)

给你一个字符串 s 和一个字符规律 p ,请你来实现一个支持 '.' 和 '*' 的正则表达式匹配。
'.' 匹配任意单个字符
'*' 匹配零个或多个前面的那一个元素
所谓匹配,是要涵盖 **整个 **字符串 s 的,而不是部分字符串。
说明:

【正则包与结果项】

d3

给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
不要使用额外的数组空间,你必须在原局耐地修改输入数组并在使用 O(1) 额外空间的条件下完成。
示例:
给定数组 nums = [1,1,2],
函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。
你不需要考虑数组中超出新长度后面的元素。
【新计数索引】

给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。
不要使用额外的数组空间,你必须在原地修改输袭枝入数组并在使用 O(1) 额外空间的条件下完成。
元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
示例:
给定 nums = [3,2,2,3], val = 3,
函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。
你不需要考虑数组中超出新长度后面的元素。
【while val存在】

实现 strStr() 函数:
给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字拍腊敏符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。
示例:
输入: haystack = "hello", needle = "ll"
输出: 2

【str.index(p)】

d4

【分支递归乘数】

给定一个整数数组 nums,求出数组从索引 i 到 j (i ≤ j) 范围内元素的总和,包含 i, j 两点。
给定 nums = [-2, 0, 3, -5, 2, -1],求和函数为 sumRange()
sumRange(0, 2) -> 1
sumRange(2, 5) -> -1
sumRange(0, 5) -> -3
【缓存和】

给定一个二进制数组,你可以最多将 1 个 0 翻转为 1,找出其中最大连续 1 的个数。
输入:[1,0,1,1,0]
输出:4
解释:翻转第一个 0 可以得到最长的连续 1。
当翻转以后,最大连续 1 的个数为 4。
【最近0的出现位置】

d5

对于一个 正整数,如果它和除了它自身以外的所有正因子之和相等,我们称它为“完美数”
输出: True
解释: 28 = 1 + 2 + 4 + 7 + 14
【折平根比较】

修改一个数,则变成非递减数列,输出True
【嵌套条件分支】

123456789101112...求出第N个数字对应的单字符数值
【while True中的数量级t和求解条件m】

d6

列表中存在最大长度为k的两个相等的数,则返True
给定一个整数数组和一个整数 k,判断数组中是否存在两个不同的索引 i 和 j,使得 nums [i] = nums [j],并且 i 和 j 的差的绝对值最大为 k。如输入: nums = [1,2,3,1], k = 3, 输出: true

【集合表示滑动窗口】

【双指针追踪】

两个数不是同一个数,存在某数2倍数的一个数则返回True
【判双零】

d7

两个数值型字符串,相加后返回结果字符串
【while中低位进位】

求节点与其祖先之间的最大差,如:

【左右递归dfs返回最大差】

一排人领糖果, 相邻的人rating高的获得较多糖,每人都有糖果。

老师想给孩子们分发糖果,有 N 个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分。
你需要按照以下要求,帮助老师给这些孩子分发糖果:
每个孩子至少分配到 1 个糖果。
相邻的孩子中,评分高的孩子必须获得更多的糖果。
那么这样下来,老师至少需要准备多少颗糖果呢?如输入: [1,0,2], 输出: 5
解释: 你可以分别给这三个孩子分发 2、1、2 颗糖果。

【左右规则】

d8

返回链表中倒数第k个节点值
【双指针追踪】

是否平衡二叉树,即任意一个节点其两颗子树的高度差不超过一。
【递归返回是否平衡和树高】

【三重while中低位进位】

d9

删除链表中的节点
【制造伪头结点】

之字形层次遍历二叉树,如:

【递归含层数的层次遍历与折返判断】

如果一个数的左边数组和与右边数组和相等,则返回此中间数的索引。
【从左累加与总和比较】

d10

输出二叉树的镜像, 如:

【制造临时节点的自身递归】

自底向上遍历二叉树,如:

【递归层次遍历】

【含hashmap[depth]的dfs递归】

d11

返回除法结果,不越界[-2**31, 2**31-1]
【正负/零划分】

一个数的二进制表示中1的个数
【带奇偶判断的逐右移位】

移除所有值为val的节点,返回链表。如输入: 1->2->6->3->4->5->6, val = 6
输出: 1->2->3->4->5
【含有目标比较的自身递归】

d12

实现int sqrt(int x)函数
【牛顿迭代】

【两次判空与全存在的各自相加】

求出根到叶子节点路径总和为固定值的所有路径集

【目标递减下叶子和当前更新的路径和与目标值的比较】

d13

数组中是否有独一无二的出现次数
【hashmap计数与值数组判重】

给定一个无序的整数数组,找到其中最长上升子序列的长度。如输入: [10,9,2,5,3,7,101,18]
输出: 4 ,解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。

【双循环动态规划】

【递归判断】

d14

给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。
如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。
注意你不能在买入股票前卖出股票。如输入: [7,1,5,3,6,4]
输出: 5
解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。
注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格。

【最低股价与最大利润同时更新】

输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。
要求时间复杂度为O(n)。如输入: nums = [-2,1,-3,4,-1,2,1,-5,4]
输出: 6, 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。

【max0 sum0初始索引0赋值,与sum0>0判断】

给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。如输入: n = 12
输出: 3 ,解释: 12 = 4 + 4 + 4
【动态规划双循环解背包问题】

d15

统计所有小于非负整数 n 的质数的数量。如输入: 10
输出: 4,解释: 小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。
【筛去法】

找出第 n 个丑数。
丑数就是只包含质因数 2, 3, 5 的正整数。如输入: n = 10
输出: 12, 解释: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 个丑数。
【三指针动态规划】

给定一个整数数组 prices,其中第 i 个元素代表了第 i 天的股票价格 ;非负整数 fee 代表了交易股票的手续费用。
你可以无限次地完成交易,但是你每次交易都需要付手续费。如果你已经购买了一个股票,在卖出它之前你就不能再继续购买股票了。

返回获得利润的最大值。如输入: prices = [1, 3, 2, 8, 4, 9], fee = 2
输出: 8,解释: 能够达到的最大利润:
在此处买入 prices[0] = 1
在此处卖出 prices[3] = 8
在此处买入 prices[4] = 4
在此处卖出 prices[5] = 9
总利润: ((8 - 1) - 2) + ((9 - 4) - 2) = 8.
【买入卖出的动态规划】

d16

给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。
设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。
注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
如输入: [7,1,5,3,6,4]
输出: 7
解释:
在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出,
这笔交易所能获得利润 = 5-1 = 4 。
随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,
这笔交易所能获得利润 = 6-3 = 3 。

【同leet714 多次买卖的动态规划】

是否是相同的树
【同空、不同空判断后的自身递归】

不特定根节点和叶子节点,返回路径总和为固定值的路径数
【自身递归与dfs递归】

d17

找出右边的值小于当前值的数的个数:
使用线段树构建左右子树,并从右到左计算前面的数小于当前值的数的个数,最终返回依次进入结果数组的list的倒置值。

【list复制法】
将遍历到的前两个和数都去掉,双重遍历T(n)= O(n)

规范的路径表示写法转换为最简路径
【栈进栈出,判断'' '.' '..'()】

d18

【复制字符库,逐次后移匹配库起始点】

按要求分一个数组为m份,求其中子数组的最大值中最小一个
【二分查找、设定子数组最大的和mid作划分节点】

【二分思想,拆分数组递归】(不用判断平衡)

d19(52%)

两个字符串对应位置移动总次数在指定步数内(ascii值的差),求字符串的最大可变换长
【滑窗记录更新最初位置、不断更新当前滑窗内移动步数最小值】

10. 股票买卖交易规则

股票交易规则:
1、T+1交易方式,即当天买入的股票,需要下一个交易日卖出。
2、买入最小单位为1手,即100股,且必须每次买入的数量必须是100股的整数倍,卖出可以不整100股卖出,但是不足100股的部分,必须一次性卖出。
3、遵循“时间优先,价格优先”的原则,即较高买进申报优先满足于较低买进申报,较低卖出申报优先满足于较高卖出申报;同价位申报,先申报者优先满足。
4、在A股市场上,投资者只能进行做多操作,不能进行做空操作;其委托交易时,其委托价格必须在个股的当天涨跌幅限制内,否则无效;委托单在当日的交易时间内有效,收盘之后,其委托单无效。
拓展资料:
股票具体交易时间规定:
每周一至周五,每天上午9:30至11:30,下午1:00至3:00,法定假期除外。
集合竞价:上午9:15——9:25,其中9:15——9:20可以撤单,9:20——9:25不能撤单,9:25以成交量最大的价格为开盘价。
连续竞价:上午9:30——11:30,下午1:00——3:00
涨跌幅限制
新股上市及重组成功上市股票首日无涨跌幅限制,一般情况下涨跌幅限制为前一交易日收市价上下10%,即一个交易日最大振幅为20%。
ST股票及*ST股票涨跌幅限制为前一交易日收市价上下5%,即一个交易日最大振幅为10%。股票涨(跌)幅价格=股票前一日收盘价格×10%(或5%)。
权证涨跌幅限制权证涨(跌)幅价格=标的证券前日涨(跌)幅价格×125%×行权比例。
科创板企业业务模式较新、业绩波动可能性较大、不确定性较高,为防止市场过度投机炒作、保障流动性,科创板股票交易设置了差异化的制度安排,诸如适当放宽涨跌幅限制、调整单笔申报数量、上市首日开放融资融券业务、引入盘后固定价格交易等。此外,科创板还对连续竞价阶段的限价订单设置了有效申报价格范围的要求,对科创板的市价订单申报要求填写买入保护限价或者卖出保护限价。下面一起来具体看看科创板交易规则都有哪些吧!
一、交易账户
投资者参与科创板股票交易,应当使用沪市A股证券账户。符合科创板股票适当性条件的投资者仅需向其委托的证券公司申请,在已有沪市A股证券账户上开通科创板股票交易权限即可,无需在中国结算开立新的证券账户。
根据《上海证券交易所科创板股票交易特别规定》,投资者可以通过竞价交易、盘后固定价格交易和大宗交易参与科创板股票交易。
二、交易方式
与沪市主板不同,科创板引入了盘后固定价格交易方式。盘后固定价格交易是指,在收盘集合竞价结束后,交易所交易系统按照时间优先顺序对收盘定价申报进行撮合,并以当日收盘价成交的交易方式。
投资者需关注,竞价交易、盘后固定价格交易及大宗交易这三种科创板股票交易方式在交易时间、申报要求、成交原则等方面存在差异。