题目描述
假设你有一个数组,其中第 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;
} 
京公网安备 11010502036488号