题目:
示例1:
示例2:
思考:
想要解决这道题,无非就是循环。按照正常情况,我们第一时间想到的就是两层循环嵌套暴力求解,但是如果我们想要一层循环就搞定呢?通过题目分析,发现卖出的最大值永远在买入的最小值之后,也就是说我们不需要考虑 min(最小值买入)之前的数据。
那么解题方法来了:
图解流程:
步骤:
具体代码:
class Solution {
public int maxProfit(int[] prices) {
if(prices == null || prices.length < 2){
return 0;
}
//先将数组的第一个数当作最小值
int min = prices[0];
//存放利润
int res = 0;
for(int i = 1; i < prices.length; i++){
//如果当前这个数比min还小,更新
if(prices[i] < min){
min = prices[i];
}else{
//不小,先求出当前值与min的差值
int tmp = prices[i] - min;
//差值与res比较
if(res < tmp){
//res小就更新
res = tmp;
}
}
}
//最终res存放的就是最大的差值
return res;
}
}
LeetCode 测试结果:
总结:
暴力求解固然可以解决问题,但有时我们往往追求的是更高的效率。