[LeetCode] 121. 买卖股票的最佳时机

这个题本质就是要求某个数与其右边最大的数的差值,这符合了单调栈的应用场景 当你需要高效率查询某个位置左右两侧比他大(或小)的数的位置的时候,于是就用单调栈解决

官方答案给的一个贪心的算法:

 

public class L121 {
    public int maxProfit(int prices[]){
        int minPrice=Integer.MAX_VALUE;
        int maxprofit=0;
        for(int i=0;i<prices.length;i++){
            if(prices[i]<minPrice){
                minPrice=prices[i];
            }
            else if(prices[i]-minPrice>maxprofit){
                maxprofit=prices[i]-minPrice;
            }
        }
        return maxprofit;
    }
}

 

 

方法二:

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

 

posted @ 2020-04-09 15:40  doyi  阅读(164)  评论(0编辑  收藏  举报