第三十二天:力扣第122题,买卖股票的最佳时机 II
地址:leetcode-cn.com/problems/be…
思路:首先确定的是每次只能持有一种股票,而且一天只能售出或者购买一种操作,所以我们可以把这题看作是找驼峰和驼谷,驼峰售出,驼谷购入,再考虑一下特殊情况就行了。
var maxProfit = function(prices) {
let res = 0;
let flag = 0;
let left = 0;
for(let i = 1; i < prices.length; i++)
{
if(prices[i - 1] >= prices[i]){
if(flag === 1)//这里是驼峰,持有状态可以售出
{
res += prices[i - 1] - prices[left];
flag = 0;
}
}
else{
if(flag === 0)//这里是驼谷,未持有状态可以购买
{
left = i - 1;
flag = 1;//表示持有状态
}
if(i === prices.length - 1)//对最后一位的判断
{
res += prices[i] - prices[left];
}
}
}
return res;
};
执行用时:76 ms, 在所有 JavaScript 提交中击败了97.60%的用户
内存消耗:39.1 MB, 在所有 JavaScript 提交中击败了30.08%的用户
后来想想,想复杂了,只要第二天比前一天大就加上多出来的就行了
var maxProfit = function(prices) {
let res = 0;
for(let i = 1; i < prices.length; i++)
{
if(prices[i] > prices[i - 1])
{
res += prices[i] - prices[i - 1];
}
}
return res;
};
再想想,直接使用reduce函数也可以
var maxProfit = function(prices) {
return prices.reduce((p, v, i) => i === 0 || v < prices[i - 1] ? p : p + v - prices[i - 1], 0)
};