问题描述
问题分析
- 本质上是求数组中前后两个数字的最大差值。类似于求连续数组的最大和问题,是一个根据当前状态的局部最优和上一状态的全局最优求当前全局最优的过程,然后下一状态的局部最优又是根据当前状况的局部或者全局最优求取。
- 该题是用一个变量维持[0 ~ i] 的最小价值(局部最优),然后用另一个变量维持最大利益(全局最优),遍历数组,不断更新这两个值,最终全局最优即为所求
经验教训
代码实现
class Solution {
public int maxProfit(int[] prices) {
if (prices == null || prices.length == 0) {
return 0;
}
int maxProfit = 0;
int minPrice = prices[0];
for (int i = 1; i < prices.length; ++i) {
if (prices[i] > minPrice) {
maxProfit = Math.max(maxProfit, prices[i] - minPrice);
}else {
minPrice = prices[i];
}
}
return maxProfit;
}
}