[JS]股票交易最大收益

股票交易的最大收益(二)

http://www.nowcoder.com/questionTerminal/4892d3ff304a4880b7a89ba01f48daf9

该题是典型的dp,首先常规思维来说,我们需要一个n x prices.length大小的array。
dp[k][i]就代表在到i个价格为止进行了k次交易获得的收益。
每次在计算当前dp[k][i]的时候有两种情况。

  1. 当前价格没有交易发生,从上一个cell取值,即dp[k][i-1]

  2. 发生交易,从j时买入,i时卖出,即 prices[i]-prices[j]+dp[k-1][j-1]
    每次遍历的时候去这两种情况的最大值即为当前最大利益。
    那么直接把这个思路转化成代码

    var maxProfit = function(prices) {
     let dp = new Array(3)
    
     for(let k=0;k<dp.length;++k) dp[k] = new Array(prices.length).fill(0)
    
     for(let k = 1;k<dp.length;++k){
    
         for(let i = 1;i<dp[0].length;++i){
             let min = prices[0]
             for(let j = 1;j<=i;++j){
                 min = Math.min(min, prices[j]-dp[k-1][j-1])
             }
             dp[k][i] = Math.max(dp[k][i-1],prices[i]-min)
    
         }
    
     }
     return dp[2][prices.length-1]
    };

    时间复杂度O(kn^2),可以看到这种方法时间复杂度很高,继续优化。
    首先min的意思是如果要进行当前这笔交易,我们的成本是多少?
    成本即为:prices[j]-dp[k-1][j-1],意思是我们买入的价格减去k-1次交易后我们手头的利润。
    假设当前我们的位置是dp[k][i],那我们怎么求出当前的最小成本呢
    答案是比较dp[k][i-1]的最小成本和当前最新的情况i-1时买入成本
    即为Math.min(min,prices[i]-dp[k-1][i-1])
    此时我们可以省掉j的那圈循环,把复杂度降到kn

    function maxProfit( prices ) {
     // write code here
    
     let dp = new Array(3)
    
     for(let k=0;k<dp.length;++k) dp[k] = new Array(prices.length).fill(0)
    
     for(let k = 1;k<dp.length;++k){
         let min = prices[0]
         for(let i = 1;i<dp[0].length;++i){
             min = Math.min(min, prices[i]-dp[k-1][i-1])
             dp[k][i] = Math.max(dp[k][i-1],prices[i]-min)
         }
    
     }
     return dp[2][prices.length-1]
    

}
```

全部评论

相关推荐

11-14 16:15
已编辑
湖南工业大学 Java
点赞 评论 收藏
分享
10-29 19:45
吉林大学 Java
从零开始数:自我评价没有必要写,但是看起来你应该是学了csdiy的一些课程,可以在专业技能里面写上自己比较熟悉操作系统和计网,但如果你是找Java的话,把第一个项目换了吧,现在看起来有点四不像。 无论是黑马点评或者说做个轮子项目,刷题和八股也搞起来吧,而且也没必要等到寒假,最近就可以开始找,找到就偷偷实习呗,别被逮到就行了。
点赞 评论 收藏
分享
友友们,我实在是不太明白,校招的话现在大多也是提前实习,然后转正也是需要考核的,考核通过才能转正,那这跟实习转正有什么区别啊
苦闷的仰泳鲈鱼刷了1...:提前实习,是让你提前熟悉业务的,后续是入职后可以减少试用期的(大部分是包入职的);转正实习,要是hc不够或者其他原因,让你正式offer可能都没有,这个风险很大。 ---个人看法和了解到的。
点赞 评论 收藏
分享
评论
5
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务