剑指Offer63.股票最大利润

原题链接

思路:本题有点贪心算法的感觉,由题意可以确定的是卖一定在买之后,也就是说我们只需要任选一天作为中介,在它当天或它之前买入,在它当天或它之后卖出,这就是题意了。那如何下手呢,要求的是最大利润,计算公式就是卖价减去买价,也就是说卖价越高越好,买价越低越好,但是我们不知道以哪一天做为那个中介,因此我们可以对于每一天,计算在这一天及之前买入股票的最低价,并计算在这天及之后卖出的最高价,然后将卖价与买价相减,就既可以保证卖在买之后,还能保证求出最优解。

参考代码如下

 1 public static int min(int a, int b) {
 2         return a < b ? a : b;
 3     }
 4 
 5     public static int max(int a, int b) {
 6         return a > b ? a : b;
 7     }
 8 
 9     public int maxProfit(int[] prices) {
10         int len = prices.length;
11         int[] left = new int[len];
12         int[] right = new int[len];
13         if(len > 0) {
14             left[0] = prices[0];
15             right[len - 1] = prices[len - 1];
16         }
17         for(int i = 1; i < len; i ++) {
18             left[i] = min(left[i - 1], prices[i]);
19             right[len - 1 - i] = max(right[len - i], prices[len - 1 - i]);
20         }
21         int ans = 0;
22         for(int i = 0; i < len; i ++) {
23             ans = max(ans, right[i] - left[i]);
24         }
25         return ans;
26     }
View Code
原文地址:https://www.cnblogs.com/bianjunting/p/14272304.html