[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; } }