代码随想录算法训练营第32天|122.买卖股票的最佳时机II ● 55. 跳跃游戏 ● 45.跳跃游戏II

122.买卖股票的最佳时机Ⅱ

题目链接:https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-ii/

var maxProfit = function(prices) {
// 用来存放利润为正数的值
let result=0
for(let i=1;i<prices.length;i++){
    result+=Math.max(prices[i]-prices[i-1],0)
}
return result
};

解题思路:

1.要想返回最大利润尽量保持每天的利润为正数才得以取得最大利润

2.本题很巧妙的一点是定义一个变量result来存放利润为正数的值,然后遍历所给数组,在利润和0之间取最大数巧妙的化解了去掉负数的情况。

55.跳跃游戏

题目链接:https://leetcode.cn/problems/jump-game/

var canJump = function(nums) {
// 缺点覆盖范围的下标,从0开始
let cover=0
if(nums.length===1) return true
for(let i=0;i<=cover;i++){
    cover=Math.max(i+nums[i],cover)
    if(cover>=nums.length-1) return true
}
return false
};

解题思路:

1.本题只看覆盖范围即可,若最大覆盖范围无法达到最后一个数字的下标,那么返回false,从下标0开始,覆盖范围的值为数字所在的下标加上当前这个数字即可得到覆盖范围的下标,也就是覆盖范围所到达的地方。

2.因为本题只看是否能够到达最后一个下标,也不用看是谁,只需要考虑覆盖范围即可。

45.跳跃游戏Ⅱ

题目链接:https://leetcode.cn/problems/jump-game-ii/

var jump = function(nums) {
if(nums.length===1) return 0
// 当前覆盖范围
let curIndex=0
// 下一个覆盖范围
let nextIndex=0
let step=0
for(let i =0;i<nums.length;i++){
    nextIndex=Math.max(i+nums[i],nextIndex)
    if(i===curIndex){
        if(curIndex!==nums.length-1){
            curIndex=nextIndex
            step++
        }
        if(curIndex>=nums.length-1) break
    }
}
return step
};

解题思路:

1.本题和上一题的差别在于,本题要统计出跳到最后一个数字最小跳跃次数,引入了三个变量来统计。

2.有一点需要注意的是如何确定走的步数是最小,将走的步数存起来,然后和下一个数走的步数比较取最大值,就可以解决此问题啦。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值