写在前面: 第一遍两个for循环暴力,后优化成一个for循环,栈动态取最小值,定义差值求最大收益
欢迎关注我的力扣github仓库,有JavaScript和C++两个版本,每日更新
C++代码:
class Solution {
public:
int maxProfit(vector<int>& prices) {
if(!prices.size())
return 0;
int diff=0;
stack<int> stack;
stack.push(prices[0]);
for(int i=0;i<prices.size();i++){
if(stack.top()>prices[i]){
stack.pop();
stack.push(prices[i]);
}
else
diff=(prices[i]-stack.top()>diff)?prices[i]-stack.top():diff;
}
return diff;
}
};
JS代码:
/**
* @param {number[]} prices
* @return {number}
*/
var maxProfit = function(prices) {
if(!prices.length)
return 0;
let diff=0,stack=[];
stack.push(prices[0]);
for(let i=0;i<prices.length;i++){
if(stack[0]>prices[i]){
stack.pop();
stack.push(prices[i]);
}
else if(diff<prices[i]-stack[0])
diff=prices[i]-stack[0];
}
return diff;
};