Views

人工智能的伎俩?最后我知道如何买卖股票!(

发布于:2019-03-04  |   作者:小编
在所有流程中,我们只允许一次销售。基于这个问题,我们得到了以下两个解决方案。
解决方案1
根据问题的含义,我们只找到矩阵的最大差异,max(price[j]price[i]),i。
获得最大差异的唯一方法是遍历当前最小值的变量记录路径一次。
时间的复杂性是O(n)。
相关的实施代码如下。
classSolution{public unionmaxProfit(int[fixed]){if(prices == null || price)
长度2){return 0;}intmin = prices[0];交易面板= 0。//第一天的价格可以视为(inti = 1; i //在更多情况下为最低报价)的购买价格或售价。=价格[I];}//当天的价格不低于报价的价格{/ /它高于之前售出的价格如果在同一天购买价格(利润//更新销售价格利润= price[i]-min;}}}returnprofit;}}
解决方案2
第二个问题的解决方案是我在采访百度时的想法。我应用了寻找矩阵最大连续子序列的概念。这个想法也被称为Kadane的算法。
我们通常要求的镜片:
如何转换矩阵的最大和连续子串?
可以使用两个相邻数字之间的差异。在这种情况下,子串的总和是在子字符串的开头和子字符串末尾的股票可以卖出的利润。
那么Kadanes的算法是什么?
kadane算法使用数学归纳的概念。
简而言之,将它制成一个现成的矩阵,如2,1,3,4,1,2,1,5,4,4,它允许您请求更大的子这并不容易。
但是,从矩阵展开时的第一个数字开始,如果您始终可以跟踪最大的子列,则可以轻松找到任何矩阵的最大子列。
换句话说,我们找不到长度为n的矩阵。可以计算长度吗?
长度计算为1,第二个可以计算,第二个可以计算,第三个可以计算,依此类推,基于i这个i + 1通过思考,我们可以实现最终目标。
要进行详细分析,请在长度为i的矩阵后插入数字i + 1。在这种情况下,矩阵的最大子列只有两种情况(i + 1或i + 1.Number)。
那是
Maxsubarraum = max(子列的总和以i + 1的数量结束,子列的总和不以i + 1的数量结束)。
*
首先计算第一件事,一个以数字i + 1结尾的子序列,以及如何计算它?
它非常简单,或者有一个前缀,子序列以数字i结尾或没有前缀。
假设数字i + 1是x,
以数字i + 1 y = max(x,以数字i和+ x结尾的子列)结束的子列(1)。
然后我们计算最后一个的总和,即不以i + 1结尾的子列。
这是什么意思?
实际上,它是插入数字i + 1之前矩阵的最大子列。
我们的归纳数学思想也反映在这里,如果你还不能理解,我们将重写*:
序列i + 1的长度的最大子序列y = max(以序列号i + 1结束的子序列和序列长度i的最大子序列)。
(2)
无论(1)和(2)如何,可以从第一种情况引入最后一种情况并进行数学总结。
我们的算法从i = 1开始,你只需要按照前面的规则一步一步地进行,你可以找到任何系列的最大子列。
classSolution{public intmaxProfit(int[]prices){if(prices == null || price)
长度2)返回0; intmaxCur = 0; intmaxSoFar = 0;(inti = 1; i 0,Math。
最大(价格[i]- 价格[i?1],maxCur +价格[i]- 价格[i?1]); maxSoFar =数学
Max(maxCur,maxSoFar);}returnmaxSoFar;}}
122
最佳时间byebye和股票II
该问题的解释如下。
这个问题可以实现无限制的购买和销售,简单太简单,只要第二天的价值大于前一天的价值,它就会购买和销售。
它不支持唾液问题,代码如下。
classSolution{public intmaxProfit(int[]prices){if(prices == null || price)
长度2)返回0; intmaxProf = 0;(inti = 1; iprices[i-1])
价格[i]- 价格[i - 1]:0);}returnmaxProf;}}
123最佳时间再见和细胞库存III
这个问题仍然很难,标题解释如下。

飞机