1、力扣原题
- 思路
开始想用单调栈,后面发现不如直接简单一点。(耗时118ms,内存57MB)
class Solution {
public int maxProfit(int[] prices) {
Stack<Integer> stack = new Stack<>();
int max = 0;
for (int i = 0; i < prices.length; i++) {
if (stack.empty()) {
stack.push(prices[i]);
}
if (stack.peek() < prices[i]) {
max = Math.max(max,prices[i] - stack.peek());
}
if (stack.peek() > prices[i]) {
stack.pop();
stack.push(prices[i]);
}
}
return max;
}
}
简单思路解法:耗时1ms,内存57.5MB
- 循环遍历
- 不断更换当前最小值
- 遍历的值,减去最小值,得到的差值,就是最大利润值。
class Solution {
public int maxProfit(int[] prices) {
int max = 0;
int minVal = prices[0];
for (int i = 0; i < prices.length; i++) {
minVal = Math.min(minVal,prices[i]);
if (prices[i] > minVal) {
max = Math.max(max,prices[i] - minVal);
}
}
return max;
}
}