leetcode刷题4

Posted cquer-xjtuer-lys

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode刷题4相关的知识,希望对你有一定的参考价值。

今天刷的题是买卖股票的最佳时机,在求解的过程中,也参考了LeetCode的官方解答思路。

第一个解题的思路是采用递归的方法来做:当找到了一个赚钱的点后,更新搜索范围,继续查找。最后把所有的赚钱的加起来就对了。

第二个是采用峰谷法。首先是峰谷都是起点。先查找谷的位置。谷的位置就是前面的点都比后面的点大。然后在谷的位置之后查找峰的位置。锋的位置就是后面的点比前面的点大。然后再累加即可。

第三个方法是动态规划。状态转移方程是:prices[i]=prices[i-1](if prices[i]<=prices[i-1]) or prices[i]=prices[i-1]+prices[i-1]-prices[i] (if prices[i]>prices[i-1])

三种方法的代码如下:

public class MaxProfit 
    /**
     * @Description 当输入[7,1,5,3,6,4]的时候,输出为 7
     * 这是因为在第二天以价格为1买入,第三天以价格为5卖出,赚4
     * 第四天以价格为3买入,第五天以价格为6卖出,赚3
     * 合并起来赚7
     */
    public static int max(int[] prices)
        return caculate(prices,0);
    
    public static int caculate(int[] prices,int s)
        if (s>=prices.length)
            return 0;
        
        int max=0;
        for (int start=s;start<prices.length;start++)
            int maxProfit=0;
            for (int i = start+1; i <prices.length ; i++) 
                if (prices[start]<prices[i])
                    int profit=caculate(prices,i+1)+prices[i]-prices[start];
                    if (profit>maxProfit)
                        maxProfit=profit;
                    
                
            
            if (maxProfit>max)max=maxProfit;
        
        return max;
    
    public static int max1(int[] prices)
        if (prices.length==0)return 0;
        int i=0;
        int maxprofit=0;
        int peak=prices[0];
        int valley=prices[0];
        while (i<prices.length-1)
            while (i<prices.length-1 && prices[i]>=prices[i+1])
                i++;
            
            valley=prices[i];
            while (i<prices.length-1 && prices[i]<=prices[i+1])
                i++;
            
            peak=prices[i];
            maxprofit+=peak-valley;
        
        return maxprofit;
    
    public static int max2(int[] prices)
        int maxProfit=0;
        for (int i = 0; i <prices.length-1 ; i++) 
            if (prices[i+1]>prices[i])
                maxProfit+=prices[i+1]-prices[i];
            
        
        return maxProfit;
    

 

以上是关于leetcode刷题4的主要内容,如果未能解决你的问题,请参考以下文章

leetcode刷题三十六

leetcode刷题MySQL题解十二

leetcode刷题四

leetcode刷题二十五

leetcode刷题MySQL题解十三

leetcode刷题三