思路:可以找出数组里每一个元素右侧的最大值,再遍历整个数组,找当前元素右侧最大值和当前元素数值的差,最大的就是要求的结果。
class Solution { public int maxProfit(int[] prices) { int[] rightMax=new int[prices.length]; for(int i=prices.length-2;i>=0;i--) { rightMax[i]=Math.max(rightMax[i+1],prices[i+1]); } int max=0; for(int i=0;i<prices.length;i++) { if(rightMax[i]-prices[i]>max) { max=rightMax[i]-prices[i]; } } return max; } }
思路2:
public class Solution { 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; } } 作者:LeetCode-Solution 链接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock/solution/121-mai-mai-gu-piao-de-zui-jia-shi-ji-by-leetcode-/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。