携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第29天,点击查看活动详情
好好学习,天天刷题~~
今日份刷题记录如下:
解题思路一
由题目可以猜想,当天的利润其实只和前一天相关,在本题中因为我们能提前知道每一天股票的价格,所以我们只需要判断后一天的价钱是否比前一天的高,如果大于0,那么我们就可以买入,并将每次的收益记录下来。
1.首先要定义四个变量:买入的天数,买入的价格,总收益和是否买入的标志
2.当天的价格比前一天低,如果没有买入,则选择买入。如果买入了,则继续持有
3.当天的价格比前一天高,如果没有买入,则不买,如果买入了,则卖出
4.返回总收益
解法一
var maxProfit = function(prices) {
//定义变量买入的天数,买入的价格,总收益和是否买入的标志
var day=0;price=0,sum=0,buy=false;
while(day<prices.length){
//当天的价格比前一天低,如果没有买入,则选择买入。如果买入了,则继续持有
if(prices[day]<prices[day+1]){
if(!buy){
price = prices[day] ;
buy=true;
}
}
//当天的价格比前一天高,如果没有买入,则不买,如果买入了,则卖出
else{
if(buy){
buy=false;
sum+=prices[day] -price;
}
}
day++;
}
return sum;
};
解题思路二
实际上,本题可以使用贪心算法。当出现上涨时,就计算前后一天的差值,并对其进行累加。如果是出现下跌的情况,就不需要管。贪心算法其实就是指不需要考虑整体,只是做出当前看来的最好选择即可。
解法二
var maxProfit = function(prices) {
var sum=0;
var min = prices[0];
for(var i=0;i<prices.length-1;i++){
if(prices[i]<prices[i+1]){
min = prices[i+1]-prices[i];
sum+=min;
}
}
return sum;
}
以上两种解法,最终执行的结果如下: