当前位置: 首页 > Web前端 > JavaScript

买卖股票的最佳时机

时间:2023-03-27 18:10:42 JavaScript

题目描述给定一个数组prices,它的第i个元素prices[i]表示给定股票在第i天的价格。您只能选择在某一天买入该股票,并在未来的另一天卖出。设计一个算法来计算您可以获得的最大利润。返回您可以从此交易中获得的最大利润。如果不能盈利,则返回0。示例1:输入:[7,1,5,3,6,4]输出:5解释:第2天买入(股价=1),第5天买入(股价=6)卖出,最大利润=6-1=5,注意利润不能是7-1=6,因为卖出价需要大于买入价;同时,您不能在买入前卖出股票。示例2:输入:prices=[7,6,4,3,1]输出:0解释:本例中没有交易完成,因此最大利润为0。原题目地址链接:https://leetcode.cn/problems/...思路分析关于这个题目,可以暴力求两次结果,但不是很好。暴力解决结果的代码方法就不说了(文末附)。一般我们遇到复杂的问题,可以把复杂的问题简单化、拆解。在解决简化拆解问题时,我们寻找规律,发现规律,最后将我们之前发现的简化问题的相似规律用在复杂问题上。从而解决问题,比如老大一上来就让我们造原子弹,啊,不行。没关系,我们先研究一下,手榴弹的制作方法。反正都是鸡蛋,都是用来爆的。总有一些共同点。手榴弹造出来了,原子弹也快了。这个比喻不太恰当,反正意思是,大家自己体会吧^_^看了标题,大概知道要求是这样的:要获得最高收益,必须低位买入卖出在高位,即:找到数组中的最大值Value,最小值,最大值减最小值就是收益率最高的股票,先买后卖。因此,买入股票的时间早,卖出股票的时间晚:最小值的持仓指数小于最大值的持仓指数。问题是,我们暂时不知道股票哪天最低,哪天最高???简单的,我们假设这只股票第一天最低,3块钱就可以买进,后面这只股票涨涨跌跌,但绝对不会低于3块钱。所以最好的交易是在第一天购买。我们采用5天一个周期,第一天用信用卡支付购买。所以我们模拟并定义一个数组:让arr=[3,8,6,12,9]。接下来,我们将问题转化为:已知第一天买入的股票价格最低,之后的每一天都比第一天的股票价格高,当天可以卖出多少钱?简化复杂问题的拆解那么我们可以根据自己的需要编写如下代码:letarr=[3,8,6,12,9]functionmaxProfit(prices){//1.假设初始利润为0,随后每一天的价格减去第一天的进价就是利润letmaxProfitValue=0for(leti=1;i