121 买卖股票的最佳时机
- 题目链接
https://leetcode.cn/problems/best-time-to-buy-and-sell-stock/?envType=study-plan-v2&envId=top-interview-150
- 题目描述
我开始的思路是有问题的,本来想着是在数组从左往右寻找一个最小值,然后从右往左寻找一个最大值,左边的索引与右边的索引相遇结束遍历,然会返回差值,但是这种就会漏掉结果在数组左边或者右边的情况,导致没有AC
好了,接下来看正确的思路。因为股票只能买卖一次,所以我们可以每天都进行了交易,我们只需要记录每天交易可以获取的最大利润(今天的股票价格减去最小股票买入价格)这样就需要我们维护一个最小的股票买入价格
- 建立返回值(res)默认为0、以及股票最小买入价格(min)赋初始值为整形的最大值
- 开始遍历数组,如果当前值小于min 则更新min的值,使用Math.max方法更新res
- 返回res
代码如下
class Solution {
public int maxProfit(int[] prices) {
int min = Integer.MAX_VALUE;
int res = 0;
for (int i = 0; i < prices.length; i++) {
if (prices[i] < min) {
min = prices[i];
}
// 这里的if可以用,也可不用
if (prices[i] - min > 0) {
res = Math.max(res, prices[i] - min);
}
}
return res;
}
}
成功AC,晚安,好梦