题目描述
假设你有一个数组,其中第 i 个元素是股票在第 i 天的价格。
你有一次买入和卖出的机会。(只有买入了股票以后才能卖出)。请你设计一个算法来计算可以获得的最大收益。
示例1
输入
[1,4,2]
返回值
3
示例2
输入
[2,4,1]
返回值
2
解题思路
- 可知买入操作必定在卖出操作之前,数组可以一直往后推,不需要再回头;
- 本质是找最小值和最大值,可以使用暴力解法。
- 因为买入操作在卖出操作之前,前面的值无论如何都要比后来的值小才可以进行计算,所以可以忽略前大后小的情况,可以使用贪心算法,记录最小值以及 当前最小值后面的 最大值。
Java代码实现
// 暴力解法求最大差 public int maxProfit (int[] prices) { if (prices == null || prices.length == 0) return 0; int max = 0; for (int i = 0; i < prices.length - 1; ++i) { for (int j = i + 1; j < prices.length; ++j) { if (prices[j] - prices[i] > max) { max = prices[j] - prices[i]; } } } return max; } // 贪心 public int maxProfit (int[] prices) { if (prices == null || prices.length == 0) return 0; int max = 0; int min = prices[0]; for (int i = 1; i < prices.length; ++i) { min = prices[i] < min ? prices[i] : min; max = prices[i] - min > max ? prices[i] - min : max; } return max; }