0
点赞
收藏
分享

微信扫一扫

121. Best Time to Buy and Sell Stock

最容易想到的就是brutal force traversing

 public int maxProfit(int[] prices) {
        int maxProfit=0;
       for(int i=0;i<prices.length-1;i++){
           for(int j=i+1;j<prices.length;j++){
               if((prices[j]-prices[i])>maxProfit)
                   maxProfit=prices[j]-prices[i];
           }
       }
        return maxProfit;
    }

但是这个方法的时间复杂度是O(n²),这个是LeetCode给出的一个官方方法,但是还是超时。

现在我们开始使用动态规划

//为了减小时间复杂度,可以使用动态规划,时间复杂度变为O(n)
    //在这种问题中,转移方程要记录(0,i]的最小值,前i个数据的最小值->前i-1个数据的最小值和当前值中的最小值,
    //dp[i]=min(dp[i-1],prices[i])
    //maxValue=(maxValue,prices[i]-dp[i])
    public int maxProfitDP(int[] prices){
        int maxProfit=0;
        int[] minPriceCurrent=new int[prices.length];
        minPriceCurrent[0]=prices[0];      //初始值
        for(int i=1;i<prices.length;i++){
            minPriceCurrent[i]=minPriceCurrent[i-1]>prices[i]?prices[i]:minPriceCurrent[i-1];
            maxProfit=(maxProfit>prices[i]-minPriceCurrent[i])?maxProfit:prices[i]-minPriceCurrent[i]; //关系式
        }
        return maxProfit;
    }

 

举报

相关推荐

0 条评论